張竣淇211617246 瞿煌人211606326算法
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | 5 | 5 |
• Estimate | • 估計這個任務須要多少時間 | 5 | 5 |
Development | 開發 | 395 | 825 |
• Analysis | • 需求分析 (包括學習新技術) | 90 | 120 |
• Design Spec | • 生成設計文檔 | 15 | 30 |
• Design Review | • 設計複審 | 15 | 30 |
• Coding Standard | • 代碼規範 (爲目前的開發制定合適的規範) | 5 | 5 |
• Design | • 具體設計 | 30 | 300 |
• Coding | • 具體編碼 | 200 | 300 |
• Code Review | • 代碼複審 | 25 | 30 |
• Test | • 測試(自我測試,修改代碼,提交修改) | 15 | 10 |
Reporting | 報告 | 30 | 30 |
• Test Repor | • 測試報告 | 10 | 10 |
• Size Measurement | • 計算工做量 | 5 | 5 |
• Postmortem & Process Improvement Plan | • 過後總結, 並提出過程改進計劃 | 15 | 15 |
合計 | 430 | 860 |
說明你如何設計這個程序編程
好比:數組
設計思路
生成四則運算表達式
將表達式從中綴表達式轉換成後綴表達式
計算後綴表達式的值
類圖
函數
逆波蘭式生成流程圖
學習
實現方案
準備工做:先在Github上建立倉庫,克隆到本地...
技術關鍵點:stack()類的使用,逆波蘭式的理解測試
此次編程主要的難點是如何按要求生成四則表達式,只要理解了原理就能一步步寫出來,但此次並無徹底實現需求,好比括號的數量以及括號中的運算符數量、不能保證運算中的減法沒有負數以及除法沒有餘數。還有將中綴表達式轉換成後綴表達式,注重細節也能寫出來編碼
逆波蘭式生成命令行
逆波蘭式計算設計
調試日誌
此次的難點在於運算表達式的生成和逆波蘭式的轉換,開始打算用二叉樹來生成表達式,可是未能完成調試
關鍵代碼
if (isNumber(s)) {
stackNum.push(s);
} else if (s.equals("(")) {
stackOper.push(s);
} else if (s.equals(")")){
while (!stackOper.peek().equals("(")) {
stackNum.push(stackOper.pop());
}
stackOper.pop();
} else {
// 當前爲+-*/
if (stackOper.empty()) {
// 運算符棧爲空
stackOper.push(s);
} else {
if (stackOper.peek().equals("(")) {
// 運算符棧頂的運算符爲括號
stackOper.push(s);
} else {
if (cmpOper(String.valueOf(stackOper.peek()), s) < 0) {
// 運算符棧頂優先級小於當前符號,壓棧
stackOper.push(s);
} else {
stackNum.push(stackOper.pop());
if (stackOper.empty()) {
stackOper.push(s);
} else {
if (cmpOper(String.valueOf(stackOper.peek()), s) >= 0) {
stackNum.push(stackOper.pop());
stackOper.push(s);
} else {
stackOper.push(s);
}
}
}
}
}
}
將中綴表達式轉換成後綴表達式用於計算結果
代碼規範
第一條 類型與中括號緊挨相連來定義數組;
第二條 採用4個空格縮進,禁止使用tab字符;
第三條 在一個switch塊內,每個case要麼經過break/return等來終止,要麼註釋說明程序將繼續執行到哪個case爲止;在一個switch塊內,都必須包含一個default語句而且放在最後,即便空代碼;
第四條 在 if/else/for/while/do 語句中必須使用大括號。即便只有一行代碼,避免採用單行的編碼方式:if (condition) statements;
第五條 方法內部單行註釋,在被註釋語句上方另起一行,使用//珠海。方法內部多行註釋使用/**/註釋,注意與代碼對齊;
第六條 IDE的text file encoding設置爲UTF-8;
第七條 註釋的斜線與註釋內容之間有且僅有空格;
第八條 大括號用約定。若是是大括號內爲空,則簡介地寫成{}便可,不須要換行;若是是非空代塊則:
左大括號前不換行。
左大括號後換行。
右大括號前換行。
右大括號後還有 lse 等代碼則不換行;表示終止的右大括號後必須換行。
第九條 if/for/while/switch/do等保留字與括號之間都必須加空格。
PMD檢查
測試用例 | 預期結果 | 是否符合預期
參數個數有誤! | 請從新運行! | 是
-n - s 參數個數有誤!請從新運行! 是
-n 50 -grade 0 年級選擇超出範圍,請選擇一二三年級。 是
-n 50 -grade h 年級選擇選項非正整數!請從新運行! 是
-n -50 -grade 3 題目數量爲負!請從新運行! 是
-n 0 -grade 3 請輸入合適的題目數量!好比1-50 是
-n h -grade 3 題目數量選項非整數!請從新運行! 是
-n 10 -grade 2 正常運行 是
-grade 3 -n 10 正常運行 是
隊友功勞 ,我除了帥 沒有別的才華。