實驗課程:程序設計與數據結構
實驗題目:結對編程-四則運算
實驗日期:2017.5.12
實驗成員:20162309邢天岳(結對同學20162313苑洪銘)
實驗內容:編譯一個程序,使其:
1. 自動生成小學四則運算題目(加、減、乘、除)
2. 持多運算符(比如生成包含100個運算符的題目)
3. 支持真分數
4. 統計正確率
5. 支持整數
指導老師:婁老師、謝老師。
實驗設計思路:
對於四則運算的程序,首先要想到的是使用if、else語句,考慮到在實驗要求中需要支持真分數,則需要分類進行編譯。對於算式的計算,需要應用到棧的方法,對教材第14章的理解需要進行再次鞏固。在如何計算出值和表達式方面,通過參考博客,需要學習逆波蘭式算法,得出計算結果,由於需要判斷的語句較多,則需要進行多次輸入新的變量。
在設計整個實驗的過程中,首先需要完成的是偽代碼的編寫,由於代碼量比較大,在編譯過程中有一定的困難,新輸入的變量和調用的方法都相對較多,十分容易產生混淆,同時本次實驗的代碼的層次十分多,環節較為復雜,在編譯過程中出現邏輯錯誤的可能性很高,需要進行多次編寫和修改。在幾個實驗要求中,支持真分數運算是比較困難的一個部分,首先要確定輸入值是否為真分數,這里就有了一個比較的過程。
在判斷完之后將進行計算,並在最后需要加上返回語句,輸出結果,同時由於一個真分數的分母不能為0,在編寫過程中需要加上額外的判斷語句。
在完成了這兩個難點之后,判斷答案並進行記錄,統計正確率是總結整個代碼的過程,對於答題情況的統計,同樣要通過變量進行統計。
通過基本實驗思路框架,可以較為系統地將代碼編寫完成,並完成運行。
實驗過程中所遇到的困難:
1. 多運算符代碼編寫所需要用到的知識環節較為陌生,在編譯過程中語法多次出現錯誤。
2. 在第一次編譯過程中,已經定義了變量,但任然在idea上仍然出現較多紅線,將代碼原樣復制到bash命令行中,再上傳后再次復制回idea上則可以正常運行,檢查代碼並沒有發現邏輯錯誤和語法錯誤。
解決方案:
多運算符問題在網上查閱資料后,仍然沒有較為明確的解決方法,在與20162318張泰毓同學交流學習后,結合他在碼雲上的代碼,完成了多運算符的代碼編譯,完善了代碼。
編譯方法為:給代碼增加一個for循環語句,在不加入括號的情況下,運算符由數字、符號、數字、符號組成,將這個語句進行長度加一的循環,就完成了多運算符的計算。
結對學習情況:
本次實驗,我與20162313苑洪銘結對共同完成本次實驗,苑洪銘同學在java學習上基本功比較扎實,在對代碼的理解上比較深入。在循環語句(是否繼續進行運算)的編譯上,苑洪銘同學多次調試后完成了編寫。
同時,苑洪銘同學在學習上穩扎穩打,擅於結合教材內容和在網上查閱相關資料來解決代碼編譯過程中所遇到的問題,比如在編譯統計運算結果的代碼的過程中,計算總題數和計算正確的題數,這部分的代碼仍然需要定義新的變量,而在出現真分數的場合對產生的隨機數還有額外的需求,這里需要調用一個私有變量,用private方法,並再次定義兩個變量來完成。再次定義的變量數量較多,再次進行計算時使用到了Math.random方法。
同時,苑洪銘同學在編寫代碼的過程中仍然存在一些小問題,本次實驗的代碼我們組編寫的量比較大,其中多次出現的重復代碼有一定的數量,使代碼在整體情況上比較贅余,不夠簡潔,經過我們共同的檢查和修改之后,最后完成了一個較為完整和明晰的程序,經測試后可以正常運行,並且符合結對編程項目的需求。
測試方法及運行結果截圖:
由截圖可以看出,運行是成功的,同時程序會自動識別真分數的約分情況。
結對搭檔20162313苑洪銘同學博客地址:http://www.cnblogs.com/yuanhongming/
PSP表格:
PSP2.1 | Personal Software Process Stages | 預估耗時(小時) | 實際耗時(小時) |
---|---|---|---|
Planning | 計划 | 15 | 17 |
· Estimate | · 估計這個任務需要多少時間 | 8 | 11 |
· Analysis | · 需求分析 (包括學習新技術) | 2 | 2 |
· Design Spec | · 生成設計文檔 | 0.5 | 0.33 |
· Design Review | · 設計復審 (和同事審核設計文檔) | 0.5 | 0.5 |
· Coding Standard | · 代碼規范 (為目前的開發制定合適的規范) | 1 | 1.5 |
· Design | · 具體設計 | 2 | 3 |
· Coding | · 具體編碼 | 3 | 4 |
· Code Review | · 代碼復審 | 2 | 1.5 |
· Test | · 測試(自我測試,修改代碼,提交修改) | 1 | 1 |
Reporting | 報告 | 1 | 1 |
· Test Report | · 測試報告 | 2 | 2.5 |
· Size Measurement | · 計算工作量 | 0.5 | 0.5 |
· Postmortem & Process Improvement Plan | · 事后總結, 並提出過程改進計划 | 2 | 2 |
實驗總結:
本次實驗是學習java以來一次較為完整和系統的考察學習情況的實驗過程,通過結對實驗的方式來實現。本次實驗有一定的難度,考察方式較為全面,需要投入較多的時間和精力,在一些實驗要求上,比如在給定的一定數量(較大)的代碼輸出結果中,需要為客戶自動篩選出是否存在重復代碼,以及多重的判斷語句,
在編譯上確實存在困難,本周也只是完成了一部分實驗內容,一些完善工作還需要完成。通過結對編程任務,在java運用上體會到了還有很多在教材學習上沒有學習到和掌握的知識,只是單純地完成教材上的代碼任務很難全面的學習,通過每周的實驗任務以及隨堂代碼運行檢查可以有效地進行鞏固對學習有很大幫助。
四則運算的實驗的代碼量相對較多,在測試和運行時,單純的命令行就無法較為簡潔地完成了,則idea的一些好處就體現出來了,代碼量大的程序idea可以更加方便地進行錯誤的檢查,判斷語法,對實驗的完成有很大的幫助。