java實現四則運算(陳浩安&郭曉航)
github項目地址:https://github.com/wzl666A/myApp-master
一、項目簡介
實現一個自動生成小學四則運算題目的命令行程序
二、項目實現情況
1. 使用 -n 參數控制生成題目的個數(實現)
2. 使用 -r 參數控制題目中數值(自然數、真分數和真分數分母)的範圍(實現)
3. 生成的題目中計算過程不能產生負數,也就是說算術表達式中如果存在形如e1 ? e2的子表達式,那麽e1 ≥ e2。(實現)
4. 生成的題目中如果存在形如e1 ÷ e2的子表達式,那麽其結果應是真分數。(實現)
5. 每道題目中出現的運算符個數不超過3個。(實現)
6. 程序一次運行生成的題目不能重復,即任何兩道題目不能通過有限次交換
7. 在生成題目的同時,計算出所有題目的答案,並存入執行程序的當前目錄下的Answers.txt文件。(實現)
8. 程序應能支持一萬道題目的生成。(實現)
9. 程序支持對給定的題目文件和答案文件,判定答案中的對錯並進行數量統計(實現)
三、PSP表格
PSP2.1 |
Personal Software Process Stages |
預估耗時(分鐘) |
實際耗時(分鐘) |
Planning |
計劃 |
30 |
60 |
· Estimate |
· 估計這個任務需要多少時間 |
60 |
90 |
Development |
開發 |
300 |
330 |
· Analysis |
· 需求分析 (包括學習新技術) |
240 |
360 |
· Design Spec |
· 生成設計文檔 |
40 |
60 |
· Design Review |
· 設計復審 (和同事審核設計文檔) |
30 |
45 |
· Coding Standard |
· 代碼規範 (為目前的開發制定合適的規範) |
15 |
20 |
· Design |
· 具體設計 |
60 |
90 |
· Coding |
· 具體編碼 |
360 |
420 |
· Code Review |
· 代碼復審 |
30 |
30 |
· Test |
· 測試(自我測試,修改代碼,提交修改) |
120 |
150 |
Reporting |
報告 |
90 |
120 |
· Test Report |
· 測試報告 |
60 |
90 |
· Size Measurement |
· 計算工作量 |
45 |
60 |
· Postmortem & Process Improvement Plan |
· 事後總結, 並提出過程改進計劃 |
30 |
40 |
合計 |
|
1450 |
1965 |
四、解題思路
- 運用逆波蘭表達式通過棧進行加減乘除操作
- 限制自動生成的表達式的形式與規模
- 規定括號在表達式中的插入位置
- 根據題目規定,不能出現負數和假分數,對不符合條件的減法和除法運算式,減號變為除號,反之除號變為減號
- 依次生成每一條表達式時,檢索是否與前面生成的表達式重復
五、設計實現過程
六、代碼說明
項目分為三個包。分別為:
ration, utils, main
其中,ration為有理數包。其中包裝了一個有理數類,該類有兩個構造方法,可以把字符串,或者兩個整型數包裝成有理數對象。
還有一個uitls類。其中的方法都為靜態方法,有把正常表達式變為逆波蘭表達式的toRPN方法,還有計算逆波蘭表達式的calRPN方法。
除此之外,還有四則運算,還有一些其他的方法,例如判斷是否是負數,判斷是否是帶分數,也重寫了toString方法。
最後是主類,主要是程序的交互邏輯。
七、測試運行
生成的四則運算表達式
生成的四則運算表達式答案
對運算結果進行檢驗
八、項目小結
剛拿到題目時,我和同伴沒有做好充足的計劃與準備就開始編寫代碼,導致途中出現了不少的問題,例如沒看清楚需求,修改時不好修改或者不好在原本框架上添加,以及從一開始大局觀不明確,走到死胡同時發現無路可走只能從頭再來。這次項目實踐給我好好上了一課,決不能低估任何項目中的需求,並且在代碼編寫開始前應該從全局出發考慮,遍及到每一個需求,找到最合適的方法與結構去處理問題,今後我會三思而後行。同時,在結對合作過程中我也學習到對方的不少優點,並且我們在工作中能形成互補,取長補短,相輔相成,讓我感覺到1+1>2和合作的快樂與優勢。
java實現四則運算(陳浩安&郭曉航)