學無止境
一、預估與實際
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | 60 | 40 |
• Estimate | • 估計這個任務需要多少時間 | 700 | 1190 |
Development | 開發 | 650 | 1130 |
• Analysis | • 需求分析 (包括學習新技術) | 50 | 300 |
• Design Spec | • 生成設計文檔 | 20 | 80 |
• Design Review | • 設計複審 | 10 | 35 |
• Coding Standard | • 代碼規範 (為目前的開發制定合适的規範) | 5 | |
• Design | • 具體設計 | ||
• Coding | • 具體編碼 | 360 | 550 |
• Code Review | • 代碼複審 | 30 | |
• Test | • 測試(自我測試,修改代碼,送出修改) | ||
Reporting | 報告 | ||
• Test Repor | • 測試報告 | ||
• Size Measurement | • 計算工作量 | ||
• Postmortem & Process Improvement Plan | • 事後總結, 并提出過程改進計劃 | ||
合計 |
二、需求分析
我通過百度搜尋的方式了解到,國小一年級數學有如下的幾個特點:
- 特點1 國小1年級的加減法數字一般不會超過20,不會有小數
- 特點2 國小1年級減法不會有小減大出現負數答案
經過分析,我認為,這個程式應當:
- 使用的數字小于21且大于0的整數
- 被減數不能小于減數
三、設計
1. 設計思路
說明你如何設計這個程式
比如:
- 這個程式有1個類,在main方法中直接通過構造函數調用
- Math.random是可以生成随機數的關鍵
- 要将字元串轉換為位元組流來存入txt文本
- 找到一些輸入錯誤的bug
2. 實作方案
寫出具體實作的步驟
- 準備工作:先在Github上建立倉庫,克隆到本地...
- 技術關鍵點:Math.random, byte,File的應用
四、編碼
- 用args數組來實作從指令行中接收參數,否則不能直接輸入參數運作
- 用byte把字元串轉換為位元組流
- 用Math.random進行随機數的生成
1. 調試日志
記錄編碼調試的日志,請記錄下開發過程中的 debug 曆程
- 字元串無法寫入到txt文本,用byte轉出位元組流寫入
- 數組越界,擴大數組
- 無法用指令行直接傳參,用args數組解決
2. 關鍵代碼
/*
** Create or reuse a zero-terminated string, first checking in the
** cache (using the string address as a key). The cache can contain
** only zero-terminated strings, so it is safe to use 'strcmp' to
** check hits.
*/
c[0] = Integer.parseInt(args[0]);
c[1] = Integer.parseInt(args[1]);
String[] timu=new String[c[0]+1]; // 建立數組存入題目
String[] daan=new String[c[0]+1];
String huanhang="\r\n"; // windows的換行,在cmd運作友善觀看
File file = new File("out.txt");
FileOutputStream u = new FileOutputStream("out.txt");
if(!file.exists()) {
file.createNewFile();
} // 建立out.txt文本
}
if(c[1]==1) {
for(i=1;i<=c[0];i++) {
fuhao=(int)(Math.random()*2);
if(fuhao==0) {
a=(int)(Math.random()*21);
b=(int)(Math.random()*21);
int answer=a+b;
System.out.println("("+i+")"+a+"+"+b+"=");
timu[i-1]="("+i+")"+a+"+"+b+"=";
daan[i-1]="("+i+")"+a+"+"+b+"="+answer;
byte[] ti =timu[i-1].getBytes(); // 将字元串轉換為位元組流為了寫入txt檔案
byte[] da =daan[i-1].getBytes();
byte[] h=huanhang.getBytes();
u.write(ti); // 将轉換好的位元組流寫入txt
u.write(h);
}
3. 代碼規範
請給出本次實驗使用的代碼規範:
- 如果有異常進行手動處理,不抛出,并人工檢查代碼是否符合規範
-
左大括号前不換行。
左大括号後換行。
右大括号前換行。
右大括号後還有 else 等代碼則不換行;表示終止的右大括号後必須換行。
- 采用4個空格縮進,禁止使用tab字元
五、測試
測試輸入:java MathExam6374 5000 1測試結果:請輸入1-400之間的題目數,否則題目重複,請重新輸入 預期結果:符合測試
測試輸入:java MathExam6374 -1 1 測試結果:輸入的題目數請大于1,請重新輸入 預期結果:符合測試
測試輸入:java MathExam6374 10 3 測試結果:本程式僅支援1年級和2年級,請重新輸入 預期結果:符合測試
測試輸入:java MathExam6374 100 2 測試結果:請輸入1-81之間的題目數,否則題目重複,請重新輸入 預期結果:符合測試
六、總結
由于自己大一大二有些混水摸魚,比較懶惰,現在寫代碼才感覺到力不從心,大三想改變一點,沒放棄不斷查資料,向别人求教,去花更多的時間完成别人很快能解決的問題,但我要堅持下去,不懂就問,慢慢進步
- 并沒有看“軟體開發的基本政策:分而治之”
- 勉強完成代碼才看到規範,以後要注意,從規範化做起。