結對做業

大氣的名字 結對做業

張竣淇211617246 瞿煌人211606326算法

1、預估與實際

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

2、需求分析

  • 小學一年級
  • 使用的數字小於100且爲20之內的加減法
  • 運算類型爲加減且不能有負數
  • 運算類型爲加減且不能有負數
  • 小學二年級
  • 使用的數字小於90
  • 乘法運算應爲表內乘法
  • 除法運算的商和餘數爲一位數
  • 運算類型爲乘除且不能有負數
  • 小學三年級
  • 運算符在2~4個,至少兩個不一樣的運算符
  • 能夠加括號
  • 減法運算的結果不能有負數
  • 除法運算除數不能爲0,不能有餘數

3、設計

1. 設計思路

說明你如何設計這個程序編程

好比:數組

  • 這個程序有x個類,x個函數,函數之間的調用關係是怎樣的?
  • 關鍵函數的流程圖是怎樣的?
  • 算法的關鍵的關鍵是什麼?
  • 這個程序有1個類,4個函數
  • 首先經過命令行接收參數
  • 而後經過函數來生成題目
  • 最後生成題目與答案文件
  • 關鍵函數是題目的生成函數認真構思

2. 實現方案

設計思路
生成四則運算表達式
將表達式從中綴表達式轉換成後綴表達式
計算後綴表達式的值
類圖
函數

逆波蘭式生成流程圖
學習

  1. 實現方案
    準備工做:先在Github上建立倉庫,克隆到本地...
    技術關鍵點:stack()類的使用,逆波蘭式的理解測試

    4、編碼

此次編程主要的難點是如何按要求生成四則表達式,只要理解了原理就能一步步寫出來,但此次並無徹底實現需求,好比括號的數量以及括號中的運算符數量、不能保證運算中的減法沒有負數以及除法沒有餘數。還有將中綴表達式轉換成後綴表達式,注重細節也能寫出來編碼

逆波蘭式生成命令行

逆波蘭式計算設計

  1. 調試日誌
    此次的難點在於運算表達式的生成和逆波蘭式的轉換,開始打算用二叉樹來生成表達式,可是未能完成調試

  2. 關鍵代碼
    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);
    }
    }
    }
    }
    }
    }
    將中綴表達式轉換成後綴表達式用於計算結果

  3. 代碼規範
    第一條 類型與中括號緊挨相連來定義數組;
    第二條 採用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檢查

5、測試

測試用例 | 預期結果 | 是否符合預期
參數個數有誤! | 請從新運行! | 是
-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 正常運行 是

6、總結

隊友功勞 ,我除了帥 沒有別的才華。

相關文章
相關標籤/搜索