1. 程式人生 > >小學一二年級隨機四則運算

小學一二年級隨機四則運算

利用 需求 要求 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 符合預期結果

六、總結

  • 由於之前基礎不牢固,花了很多時間在編程上
  • 還有很多小問題還沒解決,還需要大量的時間來解決這些問題
  • 思路在前期需要思考清楚,編碼時才能事半功倍
  • 花時間在一件有意義的事情上,你總會覺得時間過的很快,但最後收獲很大

小學一二年級隨機四則運算