第四次作业:个人项目-小学四则运算 “软件”之初版
该作业要求来源于: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 |