20172311『Java程序設計』課程 結對編程練習_四則運算第一周階段總結
20172311『Java程序設計』課程 結對編程練習_四則運算第一周階段總結
結對夥伴
學號 :20172307
姓名 :黃宇瑭
夥伴第一周博客地址:
需求分析
<一>功能要求
1.自動生成題目
可獨立使用(能實現自己編寫測試類單獨生成題目的功能)
可生成不同等級題目,類似於:
1級題目:2 + 5 =;
10 - 5 =
之類的兩個數,一個運算符的題目
2.題目運算(判題)
可獨立使用
實現中綴表達式轉為後綴表達式並計算
判斷用戶答題正誤,並輸出正確結果
3.支持真分數
可獨立使用
實現分數算式的計算
3.題目去重(擴展需求,加分項)
可獨立使用
實現對自動生成表達式的去重:如下
若生成:2 + 5 =;
為同一題目<二>對需求的理解
1.要有一個生成隨機題目的類,題目中的數可能分數,也可能是整數。 2.要有一個將中綴表達式轉化為後綴表達式的類
3.要有一個計算後綴表達式的類
4.要有一個判斷題目的類
5.將以上類進行組合寫出產品代碼<三>後續拓展的可能性
具體的題目去重思路還沒有產生,問題應該不大。
設計思路
NML類圖
思路:
要有一個能夠生成隨機最簡分數的類,並將它運用到生成隨機題目的類中去,同時生成的題目中數字和運算符之間要有一個空格符,方便在轉換為後綴表達式的時候使用棧。最後要實現交互,即讓客戶回答問題,然後系統判斷是否正確並告訴客戶。相關過程截圖
生成隨機最簡分數的類
Fraction
public class Fraction { int numerator, denominator; public Fraction() { numerator= (int) (Math.random()*51); denominator= (int) (Math.random()*51); if(denominator==0) denominator=1; reduce(); } public void reduce() { if (numerator != 0) { int common = gcd(Math.abs(numerator), denominator); numerator = numerator / common; denominator = denominator / common; } } private int gcd(int num1, int num2) { while (num1 != num2) if (num1 > num2) num1 = num1 - num2; else num2 = num2 - num1; return num1; } public String getFraction() { String result; if(numerator==0) result="0"; else if(denominator==1) result=numerator+""; else result=numerator+"/"+denominator; return result; } }
- 生成相應個數表達式的類
Create
public class Create {
String[]Arraylist;
int num,rate;
public Create(int num ,int rate)
{
this.num=num;
this.rate=rate;
Arraylist=new String[num];
}
public String questionRate(int a)
{
String express="";
String[]OC={"+","-","×","÷"};
for (int c=0;c<a;c++) {
Fraction b = new Fraction();
String d=b.getFraction();
String e=OC[(int) (Math.random() * 4)];
while (d=="0"&&e=="÷") {
Fraction f=new Fraction();
d = f.getFraction();
}
express +=d+" "+e+ " ";
}
Fraction c=new Fraction();
String e=c.getFraction();
while (express.charAt(4*rate-1)=='÷'&&e=="0")
{
Fraction d=new Fraction();
e=d.getFraction();
}
express+=e+" "+"=";
return express;
}
public void QuestionNum(){
Create F=new Create(num,rate);
for(int a=0;a<num;a++)
Arraylist[a]=F.questionRate(rate);
}
public String[] getArraylist() {
return Arraylist;
}
public String getArraylist2(int a)
{
String b;
b=Arraylist[a];
return b;
}
public String toString() {
String a="";
for (int b=0;b<num;b++)
a+=Arraylist[b]+"\n";
return a;
}
}
- 測試類
CreateTest
運行截圖
遇到的困難及解決方法
- 剛開始編寫用於生成整數類型的題目的類時出現邏輯錯誤,導致運行測試類時出現越界。
錯誤代碼截圖如下:
測試類運行結果如下:
改過後的代碼截圖如下:
錯因分析:錯誤代碼中紅圈標記的區域便是錯誤所在,該語句創建了一個空數組,與本意創建一個存放num個String型表達式的數組相違背。從而出現越界的現象。而改過之後的代碼中是在構造函數中對數組進行了實例化,也就達到目的了。
對結對的小夥伴做出評價
結對小夥伴黃宇瑭童鞋的優點就是能夠很認真的傾聽我的一些想法,同時能夠對我的想法提出自己的補充建議,而且他非常的耐心,樂於助人,在我敲代碼敲累了的時候他會主動幫我接力。缺點的話可能就是在編寫代碼的時候對自己的要求不夠嚴苛,有時會出現一些輸入錯誤。整體上來說,與黃宇瑭童鞋的結對學習甚是愉快,希望在接下來的結對編程項目中再接再厲,共同進步!!
PSP時間統計
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | 60 | 70 |
Estimate | 估計這個任務需要多少時間 | 30 | 30 |
Development | 開發 | 600 | |
Analysis | 需求分析 (包括學習新技術) | 120 | 180 |
Coding Standard | 代碼規範 (為目前的開發制定合適的規範) | 30 | 20 |
Design UML | 設計項目UML類圖 | 60 | 90 |
Coding | 具體編碼 | 180 | |
Code Review | 代碼復審 | 180 | |
Test | 測試(自我測試,修改代碼,提交修改) | 120 | |
Size Measurement | 計算工作量(實際時間 | 30 | |
Postmortem & Process Improvement Plan | 事後總結, 並提出過程改進計劃 | ||
合計 | 1410 |
20172311『Java程序設計』課程 結對編程練習_四則運算第一周階段總結