小學一二年級隨機四則運算
阿新 • • 發佈:2018-09-12
利用 需求 要求 measure ado ces 數組 修飾 分隔符
小學一二年級隨機四則運算
一、預估與實際
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | ||
? Estimate | ? 估計這個任務需要多少時間 | 1440 | 1085 |
Development | 開發 | ||
? Analysis | ? 需求分析 (包括學習新技術) | 120 | 100 |
? Design Spec | ? 生成設計文檔 | 60 | 45 |
? Design Review | ? 設計復審 | 60 | 20 |
? Coding Standard | ? 代碼規範 (為目前的開發制定合適的規範) | 60 | 45 |
? Design | ? 具體設計 | 120 | 90 |
? Coding | ? 具體編碼 | 600 | 550 |
? Code Review | ? 代碼復審 | 90 | 45 |
? Test | ? 測試(自我測試,修改代碼,提交修改) | 150 | 110 |
Reporting | 報告 | ||
? Test Repor | ? 測試報告 | 60 | 30 |
? Size Measurement | ? 計算工作量 | 60 | 30 |
? Postmortem & Process Improvement Plan | ? 事後總結, 並提出過程改進計劃 | 60 | 20 |
合計 | 1085 |
二、需求分析
我通過網上查找的方式了解到,小學一年級數學有如下的幾個特點:
- 特點
- 一年級數學要求掌握10以內的加減法,結果不大於20,不小於0.
被減數不能大於減數
經過分析,我認為,這個程序應當:- 使用的數字小於10
- 數字定義類型應為整數類型
需要能按要求生成n道題目,並且其題目隨機生成
三、設計
1. 設計思路
- 由於對象為一二年級的小學生,所以需要有一段語句判斷是一年級還是二年級
- 由於對象為一二年級的小學生,所以生成的隨機數不能太大,需隨機生成數所以需要用到random()的方法
- 一年級學生中只有加減法,在二年級學生中需要加入乘除法
由於要求標準答案和題目分開,所以要將隨機數存入數組,然後再輸出
2. 實現方案
- 準備工作:先在Github上創建倉庫,克隆到本地..
- 先想辦法利用random()生成隨機數生成加減法,然後逐步考慮生成乘除法
要將生成的隨機數存入數組,為了標準答案和題目分開
四、編碼
- 先思考一年級的加減法運算,將隨機生成的數字存入數組,然後打印
- 然後再考慮二年級的加減乘除運算
1. 調試日誌
- 在二年級的運算中,一開始沒考慮到除數是0的情況,導致程序報錯!
2. 關鍵代碼
public static void two() {
System.out.println("題目的數量:");
Scanner n=new Scanner(System.in);
int x=n.nextInt();
int f[]=new int[x];
int v[]=new int[x];
int s[]=new int[x];
int l=0;
for(int m=0;m<x;m++) {
int a=(int)(0+Math.random()*10);
int b=(int)(0+Math.random()*10);
int c=(int)(0+Math.random()*4);
f[m]=a;
v[m]=b;
s[m]=c;
l++;
if(c==0) {
System.out.println(" ("+l+") " + a + " + " + b + " = ");
}
if(c==1 && b>a){
System.out.println(" ("+l+") " + b + " - " + a+" = ");
}
if(c==1 && a>b) {
System.out.println(" ("+l+") " + a + " - " + b + " = ");
}
if(c==2 || b==0) {
System.out.println(" ("+l+") " + a + " * " + b + " = ");
}
if(c==3 && b!=0) {
System.out.println(" ("+l+") " + a + " / " + b + " = ");
}
}
System.out.println("---------------標準答案---------------");
int t=0;
for(int h=0;h<x;h++) {
t++;
if(s[h]==0) {
System.out.println(" ("+t+") " + f[h] + " + " + v[h] + " = "+(f[h]+v[h]));
}
if(s[h]==1 && f[h]>v[h]){
System.out.println(" ("+t+") " + f[h] + " - " + v[h]+" = "+(f[h]-v[h]));
}
if(s[h]==1 && f[h]<v[h]) {
System.out.println(" ("+t+") " + v[h] + " - " + f[h]+" = "+(v[h]-f[h]));
}
if(s[h]==2 ||v[h]==0) {
System.out.println(" ("+t+") " + f[h] + " * " + v[h]+" = "+(f[h]*v[h]));
}
if(s[h]==3 && v[h]!=0) {
System.out.println(" ("+t+") " + f[h] + " / " + v[h]+" = "+(f[h]/v[h]));
}
3. 代碼規範
請給出本次實驗使用的代碼規範:
- 常量命名全部大寫,單詞間用下劃線隔開,力求語義表達完整清楚,不要嫌名字長。
- 包名統一使用小寫,點分隔符之間有且僅有一個自然語義的英語單詞。包名統一使用單數形式,但是類名如果有復數含義,類名可以使用復數形式。
- 接口類中的方法和屬性不要加任何修飾符號(public 也不要加) ,保持代碼的簡潔性,並加上有效的 Javadoc 註釋。盡量不要在接口裏定義變量,如果一定要定義變量,肯定是與接口方法相關,並且是整個應用的基礎常量。
五、測試
測試序號 | 輸入年級 | 輸入題量 | 測試結果 |
---|---|---|---|
1 | 1 | 5 | 符合預期結果 |
2 | 1 | 4 | 符合預期結果 |
3 | 2 | 10 | 符合預期結果 |
4 | 2 | 3 | 符合預期結果 |
六、總結
- 由於之前基礎不牢固,花了很多時間在編程上
- 還有很多小問題還沒解決,還需要大量的時間來解決這些問題
- 思路在前期需要思考清楚,編碼時才能事半功倍
- 花時間在一件有意義的事情上,你總會覺得時間過的很快,但最後收獲很大
小學一二年級隨機四則運算