第四次作业:个人项目-小学四则运算 “软件”之初版

该作业要求来源于: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
posted @ 2018-10-15 00:26  cmhbaba  阅读(226)  评论(1编辑  收藏  举报