1. 程式人生 > >20172311『Java程序設計』課程 結對編程練習_四則運算第一周階段總結

20172311『Java程序設計』課程 結對編程練習_四則運算第一周階段總結

不同 編程 soft 理解 現象 相關 進行 函數 sof

20172311『Java程序設計』課程 結對編程練習_四則運算第一周階段總結

結對夥伴

  • 學號 :20172307

  • 姓名 :黃宇瑭

  • 夥伴第一周博客地址:

需求分析

<一>功能要求

1.自動生成題目

  • 可獨立使用(能實現自己編寫測試類單獨生成題目的功能)

  • 可生成不同等級題目,類似於:

    1級題目:2 + 5 =;
    10 - 5 =
    之類的兩個數,一個運算符的題目

2.題目運算(判題)

  • 可獨立使用

  • 實現中綴表達式轉為後綴表達式並計算

  • 判斷用戶答題正誤,並輸出正確結果

3.支持真分數

  • 可獨立使用

  • 實現分數算式的計算

3.題目去重(擴展需求,加分項)

  • 可獨立使用

  • 實現對自動生成表達式的去重:如下

    若生成:2 + 5 =;

    5 + 2 =
    為同一題目

    <二>對需求的理解

    1.要有一個生成隨機題目的類,題目中的數可能分數,也可能是整數。 2.要有一個將中綴表達式轉化為後綴表達式的類
    3.要有一個計算後綴表達式的類
    4.要有一個判斷題目的類
    5.將以上類進行組合寫出產品代碼

    <三>後續拓展的可能性

    具體的題目去重思路還沒有產生,問題應該不大。

    設計思路

  • NML類圖
    技術分享圖片

  • 思路:
    要有一個能夠生成隨機最簡分數的類,並將它運用到生成隨機題目的類中去,同時生成的題目中數字和運算符之間要有一個空格符,方便在轉換為後綴表達式的時候使用棧。最後要實現交互,即讓客戶回答問題,然後系統判斷是否正確並告訴客戶。

    相關過程截圖

  • 生成隨機最簡分數的類Fraction

public class Fraction {
    int numerator, denominator;

    public Fraction() {
       numerator= (int) (Math.random()*51);
       denominator= (int) (Math.random()*51);
       if(denominator==0)
           denominator=1;
       reduce();
 }

    public void reduce() {
        if (numerator != 0) {
            int common = gcd(Math.abs(numerator), denominator);

            numerator = numerator / common;
            denominator = denominator / common;
        }
    }

    private int gcd(int num1, int num2) {
        while (num1 != num2)
            if (num1 > num2)
                num1 = num1 - num2;
            else
                num2 = num2 - num1;

        return num1;
    }
    public String getFraction()
    {
        String result;
        if(numerator==0)
            result="0";
        else
            if(denominator==1)
                result=numerator+"";
        else
            result=numerator+"/"+denominator;
        return result;
    }
}
  • 生成相應個數表達式的類Create
public class Create {
    String[]Arraylist;
    int num,rate;
    public Create(int num ,int rate)
    {
        this.num=num;
        this.rate=rate;
        Arraylist=new String[num];
    }
    public String questionRate(int a)
    {
        String express="";
        String[]OC={"+","-","×","÷"};

        for (int c=0;c<a;c++) {
            Fraction b = new Fraction();
            String d=b.getFraction();
            String e=OC[(int) (Math.random() * 4)];
            while (d=="0"&&e=="÷") {
                Fraction f=new Fraction();
                d = f.getFraction();

            }
            express +=d+" "+e+ " ";
        }

        Fraction c=new Fraction();
        String e=c.getFraction();
        while (express.charAt(4*rate-1)=='÷'&&e=="0")
        {
            Fraction d=new Fraction();
            e=d.getFraction();
        }

        express+=e+" "+"=";
        return express;
    }
    public  void QuestionNum(){
        Create F=new Create(num,rate);
        for(int a=0;a<num;a++)
            Arraylist[a]=F.questionRate(rate);
    }

    public String[] getArraylist() {
        return Arraylist;
    }
    public String getArraylist2(int a)
    {
        String b;
        b=Arraylist[a];
        return b;
    }

    public String toString() {
        String a="";
        for (int b=0;b<num;b++)
            a+=Arraylist[b]+"\n";
        return a;
    }
}

  • 測試類CreateTest運行截圖
    技術分享圖片

遇到的困難及解決方法

  • 剛開始編寫用於生成整數類型的題目的類時出現邏輯錯誤,導致運行測試類時出現越界。
  • 錯誤代碼截圖如下:
    技術分享圖片

  • 測試類運行結果如下:
    技術分享圖片

  • 改過後的代碼截圖如下:
    技術分享圖片

  • 錯因分析:錯誤代碼中紅圈標記的區域便是錯誤所在,該語句創建了一個空數組,與本意創建一個存放num個String型表達式的數組相違背。從而出現越界的現象。而改過之後的代碼中是在構造函數中對數組進行了實例化,也就達到目的了。

對結對的小夥伴做出評價

結對小夥伴黃宇瑭童鞋的優點就是能夠很認真的傾聽我的一些想法,同時能夠對我的想法提出自己的補充建議,而且他非常的耐心,樂於助人,在我敲代碼敲累了的時候他會主動幫我接力。缺點的話可能就是在編寫代碼的時候對自己的要求不夠嚴苛,有時會出現一些輸入錯誤。整體上來說,與黃宇瑭童鞋的結對學習甚是愉快,希望在接下來的結對編程項目中再接再厲,共同進步!!

PSP時間統計

PSP2.1 Personal Software Process Stages 預估耗時(分鐘) 實際耗時(分鐘)
Planning 計劃 60 70
Estimate 估計這個任務需要多少時間 30 30
Development 開發 600
Analysis 需求分析 (包括學習新技術) 120 180
Coding Standard 代碼規範 (為目前的開發制定合適的規範) 30 20
Design UML 設計項目UML類圖 60 90
Coding 具體編碼 180
Code Review 代碼復審 180
Test 測試(自我測試,修改代碼,提交修改) 120
Size Measurement 計算工作量(實際時間 30
Postmortem & Process Improvement Plan 事後總結, 並提出過程改進計劃
合計 1410

20172311『Java程序設計』課程 結對編程練習_四則運算第一周階段總結