1. 程式人生 > >第四次作業:個人項目-小學四則運算 “軟件”之初版

第四次作業:個人項目-小學四則運算 “軟件”之初版

一個 get stage 功能 小數點 ges repo pub 數字

該作業要求來源於:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2186

代碼所在的githup的地址:https://github.com/cmhbaba/test20180912/blob/master/Main.java

一、需求分析

像《構建之法》的人物阿超那樣,寫一個能自動生成小學四則運算題目的命令行 “軟件”。


具體要求:任何編程語言都可以,命令行程序接受一個數字輸入,然後輸出相應數目的四則運算題目和答案。例如輸入數字是 30, 那就輸出 30 道題目和答案。 運算式子必須至少有兩個運算符,運算數字是在 100 之內的正整數,答案不能是負數。 如:

23 - 3 * 4 = 11


二、功能設計

1、要求用戶輸入題目數量

2、根據用戶輸入的數據輸出對應數量的題目

3、運算答案不能有負數

4、題目有2個運算符

5、隨機生成題目


三、詳細設計

隨機生成3個100以內的正整數和2個1~4的隨機數,2個1~4的隨機數代表著加減乘除,因為是隨機生成的所以符號的隨機問題也解決了。首先先隨機出來一個運算符和2個正整數組合成算式,然後再生成第2個運算符和最後一個正整數,再組合成算式,然後看是否有乘、除運算符,如果有就先進行乘、除的運算。

由於答案不能出現負數,所以當作減法的時候要判斷減數是否比被減數大,如果是的話就在次生成隨機數,指導減數比被減數小,這樣就不會出現負數。


四、主要代碼

import java.io.IOException;
import java.util.Random;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws IOException {


        Scanner input=new Scanner(System.in);
        int number;
        float result;
        System.out.println("請輸入題目數量:");
        number=input.nextInt();
        for (int i=0;i<number;i++){
            int num1=new Random().nextInt(100)+1;
            int num2=new Random().nextInt(100)+1;
            int num3=new Random().nextInt(100)+1;
            int operator1=new Random().nextInt(4)+1;
            int operator2=new Random().nextInt(4)+1;
            if (operator1==1)//加法
            {
                String a=num1+"+"+num2;
                if (operator2==1){
                    result=num1+num2+num3;
                    a=a+"+"+num3+"="+result;
                }
                else if (operator2==2){
                    result=num1+num2;
                    while(result<num3){
                        num3=new Random().nextInt(100)+1;
                    }
                    result=result-num3;
                    a=a+"-"+num3+"="+result;
                }
                else if (operator2==3){
                    result=num2*num3;
                    result=result+num1;
                    a=a+"*"+num3+"="+result;
                }
                else if (operator2==4){
                    result=num2/num3;
                    result=result+num1;
                    a=a+"/"+num3+"="+result;
                }
                System.out.println(a);
            }

            if (operator1==2)//減法
            {
                if (operator2==1){
                    result=num1-num2+num3;
                    String a=num1+"-"+num2+"+"+num3+"="+result;
                    System.out.println(a);
                }
                else if (operator2==2) {
                    while ((num1-num2)<num3){
                        num1=new Random().nextInt(100)+1;
                        num2=new Random().nextInt(100)+1;
                        num3=new Random().nextInt(100)+1;
                    }
                    result=num1-num2-num3;
                    String a=num1+"-"+num2+"-"+num3+"="+result;
                    //a=a+"-"+num3+"="+result;
                    System.out.println(a);
                }
                else if (operator2==3){
                    while (num1<(num2*num3)){
                        num1=new Random().nextInt(100)+1;
                        num2=new Random().nextInt(100)+1;
                        num3=new Random().nextInt(100)+1;
                    }
                    result=num2*num3;
                    result=num1-result;
                    String a=num1+"-"+num2+"*"+num3+"="+result;
                    //a=a+"*"+num3+"="+result;
                    System.out.println(a);
                }
                else if (operator2==4){
                    while (num1<(num2/num3)){
                        num1=new Random().nextInt(100)+1;
                        num2=new Random().nextInt(100)+1;
                        num3=new Random().nextInt(100)+1;
                    }
                    result=num2/num3;
                    result=num1-result;
                    String a=num1+"-"+num2+"/"+num3+"="+result;
                    //a=a+"/"+num3+"="+result;
                    System.out.println(a);
                }
            }

            if (operator1==3)//乘法
            {
                String a=num1+"*"+num2;
                result=num1*num2;
                if (operator2==1) {
                    result=result+num3;
                    a=a+"+"+num3+"="+result;
                }
                else if (operator2==2){
                    while (result<num3){
                        num3=new Random().nextInt(100)+1;
                    }
                    result=result-num3;
                    a=a+"-"+num3+"="+result;
                }
                else if (operator2==3){
                    result=result*num3;
                    a=a+"*"+num3+"="+result;
                }
                else if (operator2==4){
                    result=result/num3;
                    a=a+"/"+num3+"="+result;
                }
                System.out.println(a);
            }
            if (operator1==4)//除法
            {
                String a=num1+"/"+num2;
                result=num1/num2;
                if (operator2==1){
                    result=result+num3;
                    a=a+"+"+num3+"="+result;
                }
                else if (operator2==2){
                    while (result<num3){
                        num3=new Random().nextInt(100)+1;
                    }
                    result=result-num3;
                    a=a+"-"+num3+"="+result;
                }
                else if (operator2==3){
                    result=result*num3;
                    a=a+"*"+num3+"="+result;
                }
                else if (operator2==4){
                    result=result/num3;
                    a=a+"/"+num3+"="+result;
                }
                System.out.println(a);
            }
        }
    }
}

  


五、運行結果

技術分享圖片

由於我沒有設置保留小數點幾位,所以小數點之後的數字都直接舍去了。


六、問題與解決方法

一開始的時候我使用System.in.read()來讀取控制臺用戶輸入的數據,當運行的之後,比如我輸入1它就會輸出很多個題目給我,後面我發現System.in.read()讀取的只是字符,所以我後面使用Scanner類來解決。具體代碼如下:

Scanner input=new Scanner(System.in);
int number;
number=input.nextInt();

  


七、過程耗時估計與統計表

PSP2.1 Personal Software Process Stages 預計時間(分鐘) 實際時間(分鐘)
Planning 計劃 20 20
· Estimate 估計這個任務需要多少時間 180 175
Development 開發 120 150
· Analysis 需求分析 (包括學習新技術) 20 20
· Design Spec 生成設計文檔 10 20
· Design Review 設計復審 10 10
· Coding Standard 代碼規範 10 10
· Design 具體設計 30 30
· Coding 具體編碼 120 160
· Code Review 代碼復審 30 20
· Test 測試(自我測試,修改代碼,提交修改) 60 120
Reporting 報告 30 30
· 測試報告 10 10
· 計算工作量 10 10
· 並提出過程改進計劃 10 10

第四次作業:個人項目-小學四則運算 “軟件”之初版