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

浙公网安备 33010602011771号