四則運算題目生成程序(基於控制臺)
(項目文件地址:https://git.coding.net/Aes/Exp1.git)
一、需求分析
1.將用戶的輸入作為參數,生成不同數量的一定範圍的算式
2.算式的運算符數量不超過3個(隨機生成1-3運算符的算式)
3.判斷用戶的答案是否正確
4.將題目和答案輸出到文件中
5.使用分數計算,並且要保證生成的算式不重復
二、設計思路
1、算式生成:
隨機生成一個參數m,控制運算符的數量,則數字數量為m+1。隨機生成一個數字,一個運算符的規律來生成算式,最後得到三個數組,一個存放運算符,一個存放數字,還有一個存放完整的算式。
2、計算優先運算符
根據存放運算符的數組來進行遍歷,判斷之前是否出現過”*/”符號,再根據當前數組遍歷的位置,來生成一個算符優先的數組。數組元素存放的是,優先計算的符號的下標。如
3、計算算式的結果
思路就是,例如:1+2*3-4,根據計算出來的優先數組,先算2*3,結果存入result,2和3計算過後,就將這兩個數的位置0,再算1+2,2已經置0了,所以是1+result,然後置0,算3-4,3已經置0了,所以算result-4,最後的就是結果。
但是,我又發現了這個想法對於1*2+3*4或者1+2+3*4,這種式子來說,(優先符為021或者201)是不能計算出正確結果的,所以,我就講這種情況特地來計算,算出左右兩邊的,再來算中間的操作符。
4、計算結果精度
用BigDecimal類來進行精確的計算,直接使用a*b,或者a/b的double型計算,計算結果經常會不準確。
5、文件輸出
將算式和答案存入list中,寫一個函數,用list作為函數的參數,遍歷將list中的內容輸出文件
三、運行截圖
四、總結
經過同學的提醒才知道原來可以將中綴表達式轉換為後綴表達式,然後用棧數據結構來進行計算。這樣更簡單方便。而不用像我的方法一樣,要思考各種的情況。而且使用棧能夠更好的計算帶有括號的算式。
括號、分數、查重功能沒有實現。
五、PSP表格
PSP2.1 |
Personal Software Process Stages |
Time Senior Student |
Time |
Planning |
計劃 |
5 |
5 |
· Estimate |
估計這個任務需要多少時間 |
5 |
5 |
Development |
開發 |
420 |
512 |
· Analysis |
需求分析 (包括學習新技術) |
20 |
15 |
· Design Spec |
生成設計文檔 |
10 |
5 |
· Design Review |
設計復審 |
10 |
10 |
· Coding Standard |
代碼規範 |
20 |
2 |
· Design |
具體設計 |
40 |
60 |
· Coding |
具體編碼 |
240 |
300 |
· Code Review |
代碼復審 |
20 |
0 |
· Test |
測試(自我測試,修改代碼,提交修改) |
60 |
120 |
Reporting |
報告 |
30 |
6 |
· |
測試報告 |
20 |
2 |
· |
計算工作量 |
5 |
1 |
· |
並提出過程改進計劃 |
5 |
3 |
|
|
|
|
(單位:分鐘)
四則運算題目生成程序(基於控制臺)