20162323周楠 “四则运算”第一周编程博客
20162323周楠 “四则运算”第一周编程博客
需求分析
实现一个命令行程序,要求:
自动生成小学四则运算题目(加、减、乘、除)
支持整数
支持多运算符(比如生成包含100个运算符的题目)
支持真分数
统计正确率
- 自动生成一个四则运算题目,输入结果,回答完问题之后判断结果是否正确,再选择是否继续答题,以此循环。
- 后续的可能拓展,可以支持多语言系统。
- 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24,并且要求能处理用户的输入,并判断对错,打分统计正确率。能处理用户输入的真分数。
- 后续的可能拓展,可以订正
- 后续的可能拓展,可以选择题目的难度等级
编写过程记录
| PSP2.1 | Personal Softwore Process Stage | 预计耗时(分钟) | 实际耗时(分钟) | 重要成长 |
|---|---|---|---|---|
| Planning | 计划 | 20 | 30 | |
| Estimate | 做这个任务需要多长时间 | 900 | 720 | |
| Development | 开发 | 600 | 400 | |
| Analysis | 需求分析(包括学习新技术) | 60 | 40 | |
| Design Spec | 生成设计文档 | 180 | 60 | |
| Design Review | 设计复审(和同事审核设计软件) | 300 | 100 | |
| Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 60 | 60 | |
| Design | 具体设计 | 300 | 240 | |
| Coding | 具体编码 | 600 | 400 | |
| Code Review | 代码复审 | 120 | 60 | |
| Test | 测试(自我测试,修改代码,提交修改) | 240 | 120 | |
| Reporting | 报告 | 120 | 60 | |
| Test Report | 测试报告 | 120 | 80 |
| Size Measurement | 计算工作量 | 20 | 20 |
| Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 30 | |
设计思路
先完成整数部分,再完成真分数部分,最后将这两个继承下来。
这个周主要是先完成整数部分,再思考一下真分数部分,因为考虑到真分数部分比较困难,所以想在这个周先开一个头,在做整数部分的时候,是逐步解决问题,首先解决加减乘除,然后解决是否要选择继续答题,其次自动生成一个四则运算题目,输入结果,回答完问题之后判断结果是否正确,以此循环。分成了好几步来完成,及时沟通,这样的方法比较高效,不至于像无头苍蝇一样瞎写,导致与搭档重复,浪费时间。
关键代码解释
- 随机生成一个0-3的整数,0代表加法,1代表减法,2代表乘法,3代表除法
- 运用随机数生成法,switch条件语句
int c = operation.nextInt(4);
switch (c) {
case 0:
d1 = a + b;
System.out.println(a + "+" + b + "= ");
break;
case 1:
d1 = a - b;
System.out.println(a + "-" + b + "= ");
break;
case 2:
d1 = a * b;
System.out.println(a + "×" + b + "= ");
break;
case 3:
d1 = a / b;
System.out.println(a + "÷" + b + "= ");
break;
}
- 用户根据指令输入答案,判断答案是否正确
- 运用if-else条件语句来判断
answer = scan.nextInt();
if (answer == d1){
System.out.println("Great!Your answer is right.");
m++;
}
else {
System.out.println("Sorry.Your answer is not right, the right answer is " + d1);
n++;
}
- 计算正确率,并让正确率以百分数的形式输出
- 运用NumberFormat方法,输出统计结果以percent的形式输出
accuracy = m / ( m + n );
NumberFormat percent = NumberFormat.getPercentInstance();
percent.setMinimumFractionDigits(2);
System.out.println("Your accuracy is: " + percent.format(accuracy) );
运行过程截图

代码托管
遇到的困难及解决办法
-
在最后一步计算正确率时,accuracy那里得出的一直都是 0 %
-
解决方法
- 发现问题
- 首先,我在上一段判断正负的代码中添加要求打印 m 和 n 的代码,再运行,发现 m 和 n 都正常并且正确。排除之前的 m 和 n 那里出错的可能性。
- 后来我仔细检查了一下我的代码,发现我原来把 m 和 n 定义成了 int 类型,而 accuracy 则定义成了 double 类型。这时,就进行了加宽转换,损失了精度。
- 解决问题
- 将 m 和 n 改为 double 类型,在改动的时候别忘了将初始值改为0.0
- 发现问题
评价
我的结对小伙伴是朱娅霖同学,我们俩一起做了实验,然后一起做了这个四则运算的题目,在整个过程中,我们是逐步的解决问题编写代码,首先是随机生成四则运算,其次是否要选择继续答题,然后输入结果答题,最后检验是否正确,思路都非常明确,遇到问题我们俩一起讨论,她翻书,我查找资料,然后共享资源,整个过程取得的每一个突破都让我们俩欣喜若狂,感受到了合作的力量,我觉得我的小伙伴做得非常的好,唯一的问题是领航员不太会分配任务,所以还是做了很多同样的事情重复,可能会浪费了一点时间。
浙公网安备 33010602011771号