作业要求来自https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097
GitHub远程仓库的地址:https://github.com/dujunlin/djl.git
一、题目要求:
像《构建之法》的人物阿超那样,写一个能自动生成小学四则运算题目的命令行 “软件”。
具体要求:任何编程语言都可以,命令行程序接受一个数字输入,然后输出相应数目的四则运算题目和答案。例如输入数字是 30, 那就输出 30 道题目和答案。 运算式子必须至少有两个运算符,运算数字是在 100 之内的正整数,答案不能是负数。 如:
23 - 3 * 4 = 11
扩展要求:
1) 要求能出和真分数 (二分之一, 十二分之五,等)相关的练习题。
2) 并且要求能处理用户的输入,并判断对错,打分统计。 要求能处理用户输入的真分数, 如 1/2, 5/12 等。
初步拟定要实现的功能后,估计一下自己需要花多长时间。编程过程中记录自己实际用了多长时间。
然后和同学们比较一下各自程序的功能、实现方法的异同等等。
写博客纪录自己实现的过程和思路。
二、设计思路
工具:IDEA
语言:java语言
思路:创建随机数和运算符进行计算
三、主要代码
for(i=0;i<x;i++){
char A,B;
int a=(int)(Math.random()*Max);//随机生成一个整数
int b=(int)(Math.random()*Max);//随机生成一个整数
int C=(int)(Math.random()*Max);//随机生成一个整数
int D=(int)(Math.random()*3);//随机生成一个0-3的整数,分别代表加、减、乘、除
int c=(int)(Math.random()*3);//随机生成一个0-3的整数,分别代表加、减、乘、除
if((c==0 ||c==1) && (D==0 || D==1)){
if(c==0 && D==0){
DaAn=a+b+C;
System.out.print(a+"+"+b+"+"+C+"=?");
}else if(c==0 && D==1){
DaAn=a+b-C;
System.out.print(a+"+"+b+"-"+C+"=?");
}else if(c==1 && D==0){
DaAn=a-b+C;
System.out.print(a+"-"+b+"+"+C+"=?");
}else if(c==1 && D==1){
DaAn=a-b-C;
System.out.print(a+"-"+b+"-"+C+"=?");
}
}else if((c==0 ||c==1) && (D==2 || D==3)){
if(c==0 && D==2){
int E=b*C;
DaAn=a+E;
System.out.print(a+"+"+b+"*"+C+"=?");
}else if(c==0 && D==3){
int E=b/C;
DaAn=a+E;
System.out.print(a+"+"+b+"/"+C+"=?");
}else if(c==1 && D==2){
int E=b*C;
DaAn=a-E;
System.out.print(a+"-"+b+"*"+C+"=?");
}else if(c==1 && D==3){
int E=b/C;
DaAn=a-E;
System.out.print(a+"-"+b+"/"+C+"=?");
}
}else if((c==2 ||c==3) && (D==0 || D==1)){
if(c==2 && D==0){
int E=a*b;
DaAn=E+C;
System.out.print(a+"*"+b+"+"+C+"=?");
}else if(c==3 && D==0){
int E=a/b;
DaAn=E+C;
System.out.print(a+"/"+b+"+"+C+"=?");
}else if(c==2 && D==1){
int E=a*b;
DaAn=E-C;
System.out.print(a+"*"+b+"-"+C+"=?");
}else if(c==3 && D==1){
int E=a/b;
DaAn=E-a;
System.out.print(a+"/"+b+"-"+C+"=?");
}
}else if((c==2 ||c==3) && (D==2 || D==3)){
if(c==2 && D==2){
DaAn=a*b*C;
System.out.print(a+"*"+b+"*"+C+"=?");
}else if(c==2 && D==3){
DaAn=a*b/C;
System.out.print(a+"*"+b+"/"+C+"=?");
}else if(c==3 && D==2){
DaAn=a/b*C;
System.out.print(a+"/"+b+"*"+C+"=?");
}else if(c==3 && D==3){
DaAn=a/b/C;
System.out.print(a+"/"+b+"/"+C+"=?");
}
}
System.out.println("请输入你的答案:");
answer=scanner.nextInt();
if(answer==DaAn){
rigthN++;
System.out.println("恭喜你答对了!");
}else{
System.out.println("很遗憾你答错了!正确答案为:"+DaAn);
}
}
System.out.print("\n");
System.out.print("共答对"+rigthN+"题");
}
四、结果展示
五、时间表
PSP2.1 | Personal Software Process Stages | 预计时间(分钟) | 实际时间(分钟) |
Planning | 计划 | 15 | 25 |
· Estimate | 估计这个任务需要多少时间 | 180 | 200 |
Development | 开发 | 125 | 130 |
· Analysis | 需求分析 (包括学习新技术) | 25 | 30 |
· Design Spec | 生成设计文档 | 0 | 0 |
· Design Review | 设计复审 | 10 | 5 |
· Coding Standard | 代码规范 | 10 | 30 |
· Design | 具体设计 | 20 | 40 |
· Coding | 具体编码 | 130 | 150 |
· Code Review | 代码复审 | 30 | 30 |
· Test | 测试(自我测试,修改代码,提交修改) | 60 | 60 |
Reporting | 报告 | 30 | 30 |
· | 测试报告 | 10 | 10 |
· | 计算工作量 | 10 | 5 |
· | 并提出过程改进计划 | 10 | 10 |
六、遇到的问题和体会
勉勉强强实现了基本要求,但还是有很多不足