標籤:val inf 包括 return rand www. odi 一個 中綴運算式
1.結對對象
20172308周亞傑
2.本周內容需求分析
- (1).自動產生題目
-
可獨立使用(能實現自己編寫測試類別單獨產生題目的功能)
可產生不同等級題目,類似於:
1級題目:2 + 5 = 、10 - 5 = 之類的兩個數,一個運算子的題目
-
(2).題目運算(判題)
可獨立使用,實現中綴運算式轉為尾碼運算式並計算;判斷使用者答題正誤,並輸出正確結果
- (3).支援真分數
-
可獨立使用,實現分數算式的計算
- (4).題目去重(擴充需求,加分項)
-
可獨立使用,實現對自動產生運算式的去重:如下若產生:2 + 5 = & 5 + 2 = 為同一題目
設計分析
-
1.自動產生題目:這裡的題目的難度我是採用操作符的個數來定義的,根據操作符再產生操作符加一的數字(這裡暫時沒有編寫真分數的情況),然後使用迴圈進行產生,然後以字串形式輸出出來。
-
2.中綴轉尾碼:這個代碼的編寫我們兩個是交流後各自獨立完成的,我採用的是那個使用操作符優先順序表產生二維數組,根據索引值進行判斷優先順序,決定操作符是入棧還是出棧,對於數字直接進行輸出,然後最後把棧裡所存的操作符再進行逐個輸出,完成尾碼運算式的輸出。
-
3.尾碼求值:這裡是由寫一個方法:從左向右掃描尾碼運算式,遇到運算元進棧,遇到操作符則彈出棧頂的兩個元素,將結果計算出來再壓進棧,最後棧內剩餘一個元素即為最終答案
設計UML類圖(重點!!!)
UML類圖的設計見下:
遇到問題及解決方案代碼展示
package arithmetic;import java.util.Random;import java.util.ArrayList;public class Questions{ ArrayList<Object> array = new ArrayList<Object>(); Random generator = new Random(); char [] newchar = {'+','-','*','/'}; protected int number; int NUM; public Questions() { number = 0 ; } public Object getQuestion(int num) { int num1 = num; while (num > 0) { int figure = (int) generator.nextInt(9) + 1; array.add(figure); number = (int) (Math.random() * 4); array.add(newchar[number]); num--; } String obj = ""; while (num < 2*num1) { obj += array.get(num); num++; } int other = (int) generator.nextInt(9)+1; array.add(other); obj+=other+"="; return obj; } }
package arithmetic;import java.util.Stack;public class test{ private int number,num1,num2; private int value1,value2; private int index=0; private int[][] array = {{0,0,0,0,0}, {0,1,1,-1,-1}, {0,1,1,-1,-1}, {0,1,1,1,1}, {0,1,1,1,1}}; public String obj="2+1-2*2-2/1="; Stack stack = new Stack(); public test() { num1=0; num2=0; value1=0; value2=0; } public String getAnswer() { String result = ""; while (index<obj.length()-1) { char x = obj.charAt(index); if(x>='0'&&x<='9') result += x+" "; else { switch (x) { case '+': number = 1; break; case '-': number=2; break; case '*': number =3; break; case '/': number=4; break; } if(stack.empty()) { num1 = number; number = 0; } else { num2 = number; number=0; } if(array[num1][num2]<=0) { stack.push(x); value1 +=1; } else { result+=stack.pop(); stack.push(x); value1 +=1; value2 +=1; } } index++; } for(int y =0;y<value1-value2;y++) result += stack.pop(); return result; }}
3.PSP分析
| PSP2.1 |
Personal Software Process Stages |
預估耗時(分鐘) |
| Planning |
計劃 |
60 |
| Estimate |
估計這個任務需要多少時間 |
3 |
| Development |
開發 2000 |
3000 |
| Analysis |
需求分析 (包括學習新技術) |
350 |
| Coding Standard |
代碼規範 (為目前的開發制定合適的規範) |
60 |
| Design UML |
設計項目UML類圖 |
60 |
| Coding |
具體編碼 |
1500 |
| Code Review |
代碼複審 |
30 |
| Test 測試 |
(自我測試,修改代碼,提交修改) |
300 |
| Size Measurement 計算工作量(實際時間 ) |
2 |
2 |
| Postmortem & Process Improvement Plan |
事後總結, 並提出流程改善計劃 |
30 |
|
合計 |
4395 |
2017-2018-2 20172302 『Java程式設計』課程 結對程式設計練習_四則運算