第一次代碼做業

1、預估與實際

PSP2.1 Personal Software Process Stages 預估耗時(分鐘) 實際耗時(分鐘)
Planning 計劃
• Estimate • 估計這個任務須要多少時間 180 200
Development 開發
• Analysis • 需求分析 (包括學習新技術) 10 10
• Design Spec • 生成設計文檔 5 5
• Design Review • 設計複審 5 5
• Coding Standard • 代碼規範 (爲目前的開發制定合適的規範) 10 10
• Design • 具體設計 10 10
• Coding • 具體編碼 60 60
• Code Review • 代碼複審 5 5
• Test • 測試(自我測試,修改代碼,提交修改) 30 30
Reporting 報告 30 30
• Test Repor • 測試報告 30 30
• Size Measurement • 計算工做量
• Postmortem & Process Improvement Plan • 過後總結, 並提出過程改進計劃 5 5
合計 200

2、需求分析

  • 特色1
  • 通過分析,我認爲,這個程序應當:
    • 一年級使用20之內的數字進行加減法,而且結果須要小於等於20大於等於0。
    • 二年級使用乘法表上的乘法做爲題目,除法則是100之內的數除以一個個位數,而且答案也應該爲個位數。

3、設計

1. 設計思路

說明你如何設計這個程序算法

  • 這個程序須要有三個函數,一個一年級函數,一個二年級函數,一個輸出文件函數。
  • 使用主函數調用一年級函數或二年級函數,函數計算完成以後調用輸出文件函數進行輸出
  • 算法的關鍵是
  • 1.使用數組保存隨機出的數值,符號,答案
  • 2.一年級函數中,須要判斷兩數相加或相減是否小於等於20大於等於0,若是不是使用 i--並使用continue結束當前循環,使當前數值做廢。
  • 3.二年級函數中,除法須要將答案做爲被除的數,第一個隨機數值或第二個隨機數值做爲除數,以保證符合需求,並減小時間浪費。

2. 實現方案

  • 準備工做:先在Github上建立倉庫,克隆到本地...
  • 技術關鍵點:輸入數值驗證,使用while無限循環,若是數值正確使用break脫離循環。 使用二維數組保存隨機出的數值。

4、編碼

  • 首先隨機三個數值,a,b,m,m爲符號限制隨機數只能爲1,2,1表明加法2表明減法,在二年級則是乘除。
  • 一年級先隨機abm,而後根據m的數決定加減,計算出ans答案,而後驗證ans是否小於而是,若是不小於20則continue,將這次數據做廢,而後將a b m ans存入一個二維數組,二維數組第一個數表明題目,第第二個數0 2表明運算的兩個數,1表明符合,3表明答案。
  • 二年級先隨機abm,若是m爲1,使用乘法,將a m b ans依次存入二維數組中,若是m爲2,則是除法此時將ans 與 a做爲運算數值,b做爲答案。
  • 輸出的時候先將二維數組的0 1 2 輸出出去,做爲題目,而後將0 1 2 3 輸出,做爲答案。

1. 調試日誌

  • 第一次調試,發現全部結果都是0,發現是放在for循環數組的第一個數寫成n了。
  • 第二次調試,發現一年級ans不符合標準,使用if,剔除不符合標準的數值
  • 第三次調試,發現二年級ans不符合標準,除法使用ans 與 a做爲運算數值
  • 第四次調試,發現沒有處理異常的能力,是用while循環,檢測輸入數值是否在規定數值內,若是符合使用break跳出循環,若是不符合則繼續循環。

2. 關鍵代碼

for(int i = 0; i < n; i++) {
            int a = (int) (Math.random()*20);
            int b = (int) (Math.random()*20);
            int ans = 0;
            int mark = (int) (Math.random()*2+1);
            String strMark = null;
            if(mark == 1) {
                ans = a+b; 
                strMark = "+";
            }else {
                ans = a-b;
                strMark = "-";
            }
            if(ans >= 20 || ans < 0) {
                i--;
                continue;
            }
                
            str[i][0] = String.valueOf(a);
            str[i][1] = strMark;
            str[i][2] = String.valueOf(b);
            str[i][3] = String.valueOf(ans);
        }
  • 將答案大於20的數值剔除掉,將符合需求的數值存入二維數組中

3. 代碼規範

  • 第一條:不容許任何魔法值(即未經預先定義的常量)直接出如今代碼中。
  • 第二條:大括號的使用約定。若是是大括號內爲空,則簡介地寫成{}便可,不須要換行;若是是非空代碼塊則:左大括號前不換行。左大括號後換行。右大括號前換行。右大括號後還有 else 等代碼則不換行;表示終止的右大括號後必須換行。
  • 第三條:左小括號和字符之間不出現空格;一樣的,有小括號和字符之間也不出現空格。
  • 第四條:在 if/else/for/while/do 語句中必須使用大括號。
  • 第五條:任何二目、三木運算符的左右兩邊都須要加一個空格。
  • 第六條:單行字符數限制不超過120個,超出須要換行,換行時遵循以下原則:第二行相對第一行縮進 4 個空格,從第三行開始,再也不繼續縮進,參考示例。運算符與下文一塊兒換行。方法調用的點符號與下文一塊兒換行。方法調用時,多個參數,須要換行時,在逗號後進行。

5、測試

  • 須要測試若是輸入數值不是規定數值,程序是否能處理這種狀況數組

  • 輸入200 輸出:您輸入的不是小於100大於0的整數,請從新輸入
  • 輸入-1 輸出:您輸入的不是小於100大於0的整數,請從新輸入
  • 輸入1.1 輸出:您輸入的不是小於100大於0的整數,請從新輸入
  • 輸入-2.1 輸出:您輸入的不是小於100大於0的整數,請從新輸入
  • 輸入0 輸出:您輸入的不是小於100大於0的整數,請從新輸入
  • 輸入10 3 輸出:您輸入的不是1或2,請從新輸入
  • 輸入10 -1 輸出:您輸入的不是1或2,請從新輸入
  • 輸入10 1.1 輸出:您輸入的不是1或2,請從新輸入
  • 輸入10 0 輸出:您輸入的不是1或2,請從新輸入
  • 輸入10 -2.6 輸出:您輸入的不是1或2,請從新輸入
  • 輸入6 1輸出正常dom

6、總結

  • 本次做業先將問題簡化,先在主函數裏寫出隨機一個加減法的函數,而後寫出一個二維數組進行儲存,而後寫出一個輸出函數。而後將一年級函數與輸出函數從主函數中分開,分爲單獨的函數,而後再寫一個二年級函數,將一年級函數複製過去,在判斷符號處進行修改。而後測試程序是否可以正常運行。測試成功後,在處理異常輸入數據。
相關文章
相關標籤/搜索