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

评价

我的结对小伙伴是朱娅霖同学,我们俩一起做了实验,然后一起做了这个四则运算的题目,在整个过程中,我们是逐步的解决问题编写代码,首先是随机生成四则运算,其次是否要选择继续答题,然后输入结果答题,最后检验是否正确,思路都非常明确,遇到问题我们俩一起讨论,她翻书,我查找资料,然后共享资源,整个过程取得的每一个突破都让我们俩欣喜若狂,感受到了合作的力量,我觉得我的小伙伴做得非常的好,唯一的问题是领航员不太会分配任务,所以还是做了很多同样的事情重复,可能会浪费了一点时间。

posted on 2017-05-14 21:07  GiggleKV  阅读(187)  评论(3)    收藏  举报

导航