第四次作业
作业四 :个人项目-小学四则运算
作业要求来自https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2186
我的github远程仓库的地址:https://github.com/llllll1/ls
-
题目要求:
___________________________________________________________________________________________
像《构建之法》的人物阿超那样,写一个能自动生成小学四则运算题目的命令行 "软件"。
具体要求:任何编程语言都可以,命令行程序接受一个数字输入,然后输出相应数目的四则运算题目和答案。例如输入数字是 30, 那就输出 30 道题目和答案。 运算式子必须至少有两个运算符,运算数字是在 100 之内的正整数,答案不能是负数。 如:
23 - 3 * 4 = 11
二、扩展要求:
___________________________________________________________________________________________
1) 要求能出和真分数 (二分之一, 十二分之五,等)相关的练习题。
2) 并且要求能处理用户的输入,并判断对错,打分统计。 要求能处理用户输入的真分数, 如 1/2, 5/12 等。
三、设计思路:
___________________________________________________________________________________________
工具:IntelliJ IDEA 2018
语言:Java
思路:先让用户输入想要生成的题目数量,然后产生随机的符号与数字组合,进行四则运算,然后统计用户做题结果,计算出正确率
方法: main()方法;
getRandom方法:产生随机数与运算符;
getFuhaoJieguo()方法:用于四则的规则
yunsuan()方法:用于结合随机产生的符号与数字并对其进行运算
ZhanShi()方法:用于显示正确率
四、个人软件过程耗时估计与统计表
___________________________________________________________________________________________
PSP2.1 |
Personal Software Process Stages |
Time Senior Student |
Time (minute) |
Planning |
计划 |
8 |
5 |
· Estimate |
估计这个任务需要多少时间 |
12 |
30 |
Development |
开发 |
90 |
20 |
· Analysis |
需求分析 (包括学习新技术) |
20 |
25 |
· Design Spec |
生成设计文档 |
0 |
0 |
· Design Review |
设计复审 |
3 |
6 |
· Coding Standard |
代码规范 |
0 |
5 |
· Design |
具体设计 |
10 |
20 |
· Coding |
具体编码 |
35 |
35 |
· Code Review |
代码复审 |
10 |
10 |
· Test |
测试(自我测试,修改代码,提交修改) |
15 |
15 |
Reporting |
报告 |
9 |
10 |
· |
测试报告 |
0 |
0 |
· |
计算工作量 |
5 |
10 |
· |
并提出过程改进计划 |
0 |
0 |
五、主要代码
___________________________________________________________________________________________
import java.util.Scanner; public class Fourth { private int timu=0;//题目总数 private int zhengque=0;//做对的题目数 private int zuixiao=0;//数字下限 private int zuida=100;//数字上线 private String jieguo=""; private char fuhao[]=new char[]{'+','-','*','/'}; private float jieguoNumber=0; public static void main (String[] args) { Fourth fourth=new Fourth(); System.out.print("请问你要生成多少题目?:"); Scanner tiqu = new Scanner(System.in); int number = tiqu.nextInt(); fourth.settimu(number); fourth.ZhanShi(); } public void settimu(int timu) { this.timu = timu; } private int getRandomNumber()//产生随机 { return (int)(zuixiao+Math.random()*(zuida-zuixiao+1)); } private char getRandomFuhao()//产生随机 { int random=(int)(Math.random()*4); return fuhao[random]; } private float getFuhaoJieguo(char fuhao,float x,float y)//四则运算 { float jieguo=0; switch (fuhao){ case '+': jieguo=x+y; break; case '*': jieguo=x*y; break; case '-': jieguo=x-y; break; case '/': jieguo=x/y; break; } return jieguo; } private void yunsuan() { int number[]=new int[3]; char []fuhao=new char[2]; while (true) { for(int i=0;i<number.length;i++) { number[i]=getRandomNumber(); } fuhao[0]=getRandomFuhao(); fuhao[1]=getRandomFuhao(); if(fuhao[0]=='*' || fuhao[0]=='/')//如果是乘法或者是除法就执行了 { if(number[1]==0)continue; jieguoNumber=getFuhaoJieguo(fuhao[0],number[0],number[1]); if(fuhao[1]=='/' && number[2]==0)continue; jieguoNumber=getFuhaoJieguo(fuhao[1],jieguoNumber,number[2]); }else { if(fuhao[1]=='/'&& number[2]==0)continue; if(fuhao[0]=='-') { jieguoNumber=getFuhaoJieguo(fuhao[1],-number[1],number[2]); fuhao[0]='+'; } else { jieguoNumber=getFuhaoJieguo(fuhao[1],number[1],number[2]); } jieguoNumber=getFuhaoJieguo(fuhao[0],number[0],jieguoNumber); } if(jieguoNumber<0)continue; else break; } jieguo=number[0]+""+fuhao[0]+number[1]+fuhao[1]+number[2]; System.out.print(jieguo+"=");// 把随机之后的数字与符号都输出 Scanner tiqu = new Scanner(System.in); float age = tiqu.nextFloat(); if(Math.abs(age-jieguoNumber)>0.01)//判断用户输入是否正确 { System.out.print("你做错了,答案是:"+String.format("%.2f", jieguoNumber)+"\n"); }else{ System.out.print("你做对了\n"); zhengque++;//做对了之后正确的题目数量加一 } } public void ZhanShi() { int shengyutimu=timu; while (shengyutimu>0){ shengyutimu--; yunsuan(); } System.out.print("你回答的正确率为"+(float)zhengque/timu);//显示正确率 } }
六、遇到的问题与体会
___________________________________________________________________________________________
遇到的问题:不知道如何产生随机的符号与数字并进行结合运算
解决方法:有上过度娘搜索问题的解决方法,可是东西不知道怎么归纳,后来选择与同学进行交流,问了几个有思路的同学,慢慢自己就摸索出来了。
体会:写代码的时候首先要想到自己应该如何去完成它,如何去实现它,然后才着手进行编写,而不是一边想一边写,那样等之后写到一个地方卡住了,不知道怎么写了可能就会进行不下去,当你又有另一种思路的时候,可能前面便携的代码都需要修改,就白费了。