結對(第二週)

20165226 結對編程項目-四則運算 階段總結

1、需求分析

一、隨機生成題目html

  • 生成的題目個數從命令行輸入
  • 用戶可選擇生成不一樣難度的題目,好比經過參數指定: (1) 運算符個數範圍 (2) 運算符限定(小學一年級題目只生成 + - 題目)
  • 能屢次生成題目

二、題目運算(判題)java

  • 支持多運算符
  • 支持整數
  • 支持真分數
  • 轉換爲後綴表達式(也能夠直接計算中綴表達式)

三、題目合法性判斷git

  • 可獨立使用
  • 可用於測試生成題目的正確性

四、擴展需求編程

  • 題目去重
  • 支持多語言
  • 處理生成題目並輸出到文件
  • 完成題目後從文件讀入並判題

2、設計思路

一、設計一個IntNumber類,用來實現整數的四則運算
二、設計一個Judgement類,用來判斷用戶輸入與實際計算值是否相等,並統計正確的次數
三、設計一個Fraction類,用來實現真分數的四則運算
四、設計主類,生成隨機數,生成題目,並判斷正確率
五、設計測試類,測試整數類與分數類的四則運算
六、設計一個MultiLanguage類,用來實現多語言的擴展
dom

3、核心代碼及註釋

  • Calculate
import java.text.NumberFormat;
import java.util.*;
public class Calculate {
    public static void main(String[] args) {
        NumberFormat number = NumberFormat.getPercentInstance();
        Random ran = new Random();
        Scanner scan = new Scanner(System.in);
        while (true) {
            System.out.print("請輸入要生成的題目數量:");
            int A = scan.nextInt();
            for (int i = 0; i < A; i++) {
                int B = ran.nextInt(2);
                int C = ran.nextInt(4);
                IntNumber in1 = IntNumber.obj();
                IntNumber in2 = IntNumber.obj();
                Fraction score1 = Fraction.obj();
                Fraction score2 = Fraction.obj();
                if (B == 0) {//隨機生成整數的計算題目
                    switch (C) {
                        case 0:
                            int num = in1.add(in2);
                            String num1 = "" + num;
                            int n = scan.nextInt();
                            Judgement.judge(n == num, num1);
                            break;
                        case 1:
                            num = in1.subtract(in2);
                            num1 = "" + num;
                            n = scan.nextInt();
                            Judgement.judge(n == num, num1);
                            break;
                        case 2:
                            num = in1.multiply(in2);
                            num1 = "" + num;
                            n = scan.nextInt();
                            Judgement.judge(n == num, num1);
                            break;
                        case 3:
                            num1 = in1.divide(score1);
                            String Q = scan.next();
                            Judgement.judge(Q.equals(num1), num1);
                            break;
                    }
                } else {//隨機生成真分數的計算題目
                    switch (C) {
                        case 0:
                            Fraction num2 = score1.add(score2);
                            String num1 = num2.toString();
                            String s = scan.next();
                            Judgement.judge(s.equals(num1), num1);
                            break;
                        case 1:
                            num2 = score1.subtract(score2);
                            num1 = num2.toString();
                            s = scan.next();
                            Judgement.judge(s.equals(num1), num1);
                            break;
                        case 2:
                            num2 = score1.multiply(score2);
                            num1 = num2.toString();
                            s = scan.next();
                            Judgement.judge(s.equals(num1), num1);
                            break;
                        case 3:
                            num2 = score1.divide(score2);
                            num1 = num2.toString();
                            s = scan.next();
                            Judgement.judge(s.equals(num1), num1);
                            break;
                    }
                }
            }
            System.out.println("你答對的題目總數:" +  Judgement.getTrues());
            double T = (double) Judgement.getTrues() / A;//計算正確率
            System.out.println("正確率爲:" + number.format(T));
            System.out.println("是否繼續生成題目?(y/n):"  );//屢次生成題目,直到用戶選擇退出
            String s1 = scan.next();
            if (s1.equalsIgnoreCase("n")){
                break;
            }
        }
    }
}
  • 多語言的實現
import javax.lang.model.element.NestingKind;
import java.util.*;

public class MultiLanguage {
    private Integer option;
    private String language;
    public String getLanguage() {
        return language;
    }
    public MultiLanguage(){
        setLanguage();
    }
    private void setLanguage(){
        System.out.printf("Please choose a language and type it! \n" +
                "請你選擇一種語言而且輸入對應的縮寫!\n" +
                "請妳選擇壹種語言並且輸入對應的縮寫!\n" +
                "EN/ZH_CN/ZH_HK");
        HashMap<String,Integer> lanList = new HashMap<String,Integer>();
        lanList.put("EN",0);
        lanList.put("ZH_CN",1);
        lanList.put("ZH_HK",2);
        Scanner sc = new Scanner(System.in);
        language = sc.nextLine();
        this.option = lanList.get(language);
    }
    public void output(String type){
        String[] output_1 = {"Ready......Go!","預備,開始!","準備,開始!"},
                output_2 = {"YOUR ANSWER : ","你的回答是:","妳的回答是:"},
                output_3 = {"KEY :","答案爲:","答案爲:"},
                output_4 = {"------------ERROR------------","------------錯誤------------","------------錯誤------------"},
                output_5 = {"------------ACCESS-----------","------------經過-------------","------------通過------------"},
                output_6 = {"Your Accuracy:","您的正確率:","您的正確率:"};

        if(type.equals("st"))System.out.printf(output_1[option] + "\n");
        else if(type.equals("ans"))System.out.printf(output_2[option]);
        else if(type.equals("key"))System.out.printf(output_3[option]);
        else if(type.equals("err"))System.out.printf(output_4[option] + "\n");
        else if(type.equals("acc"))System.out.printf(output_5[option] + "\n");
        else if (type.equals ( "accuracy") )System.out.printf(output_6[option] );

    }
}

4、測試方法

  • IntNumber類的方法測試
    ide

  • Fraction類的方法測試
    單元測試

5、運行過程截圖


6、代碼託管地址

7、遇到的困難及解決方法

  • 問題1:- 問題一:看教程,原本應該在插件安裝對話框的搜索中輸入junit,單擊JunitGenerator V2.0,單擊綠色的Install按鈕安裝。但我沒有搜到JunitGenerator V2.0

  • 問題1解決方案:經過百度搜索,在網上查找並下載:到本地,而後找到插件所在位置,再install plugin from disk,。學習

  • 問題2:如何實現隨機生成數和題目?
  • 問題2解決方法:上星期學了第八章經常使用實用類中學習過Random類,經過反覆思考如何將書上給出的方法運用於實際,最終運用了
Random random = new Random()
random.nextInt()

並結合switch語句,成功實現生成隨機數和題目測試

8、對接對小夥伴的評價

  • 結對搭檔:20165230田坤燁
  • 整個編程過程當中最困難的是其擴展內容的補充,其次是如何進行產品代碼測試(具體測試哪一部分)。經過討論,咱們分工進行了本次編程,更進一步學會了四則運算的編寫及junit的測試運用,在不斷地調試更改錯誤的過程當中,收益很大。兩我的的思惟碰撞,顯然更有效,但在以後的結對學習中但願能更明確本身的優點,使分工更明確,來提升結對學習效率。

9、參考獲引用的設計、實現

10、PSP表格

PSP Personal Software Process Stages) 預估耗時(分鐘) 實際耗時(分鐘)
Planning 計劃 30 70
Estimate 估計這個任務須要多少時間 360 500
Development 開發 60 100
Analysis 需求分析 (包括學習新技術) 30 40
Design Spec 生成設計文檔 30 35
Design Review 設計複審 (和同事審覈設計文檔) 25 20
Coding Standard 代碼規範 (爲目前的開發制定合適的規範) 15 30
Design 具體設計 60 75
Coding 具體編碼 180 255
Code Review 代碼複審 30 25
Test 測試(自我測試,修改代碼,提交修改) 150 135
Reporting 報告 60 90
Test Report 測試報告 20 25
Size Measurement 計算工做量 10 5
Postmortem & Process Improvement Plan 過後總結, 並提出過程改進計劃 60 80
合計 1120 1485
相關文章
相關標籤/搜索