20165201 结对编程练习_四则运算(第一周)

20165201 结对编程练习_四则运算(第一周)


1、需求分析

实现一个命令行程序,要求:

  • 自动生成指定数量的小学四则运算题目(加、减、乘、除)
  • 支持整数
  • 统计正确率

扩展需求:

  • 支持多运算符(比如生成包含100个运算符的题目)
  • 题目去重
  • 支持真分数
  • 处理生成题目并输出到文件
  • 完成题目后从文件读入并判题

2、设计思路

  由于我之前自己写过C语言的小学生计算辅助系统,因此我脑中已经有了大体的框架,只需将想法转换为Java语句,但是我的Java的一些语句掌握的并不是很好,所以第一阶段我只能把程序做的简单一点。
  这个程序的核心显然是产生随机数和符号优先级的判定,这一阶段我先做到前者。Java比C语言方便的一点就是,在C语言中,想真正产生随机数往往要用时间作为随机数种子,而Java可以直接调用Random函数,范围可以直接写在后面的括号里。在本程序中,随机数函数不只用来产生要进行运算的数字,还要用来产生随机数进行分支语句的判断,即产生0-3,四个数,来选择产生哪个符号。
  在下一阶段我们要实现带括号的多个符号运算等功能。

3、实现过程中的关键代码解释

  • 产生两个随机数,有范围限制,小学生做不了太难的题
Random random = new Random();
int num_1 = random.nextInt(20);
int num_2 = random.nextInt(20);
  • switch-case分支语句,根据随机情况,调用4种运算
switch (random.nextInt(4)) {
                case 0:
                    result=Jisuan.add(num_1,num_2);
                    System.out.println(num_1+" + "+num_2);
                    break;
                case 1:
                    result=Jisuan.sub(num_1,num_2);
                    System.out.println(num_1+" - "+num_2);
                    break;
                case 2:
                    result=Jisuan.mul(num_1,num_2);
                    System.out.println(num_1+" * "+num_2);
                    break;
                case 3:
                    result=Jisuan.div(num_1,num_2);
                    System.out.println(num_1+" / "+num_2);
                    break;
            }
  • 如果用户输入的答案是正确的,就输出Right,反之输出Wrong,并给出正确答案~
System.out.println("请输入你的答案:");
answer=scanner.nextInt();
if (answer==result) {
    System.out.println("Right !!!");
    right++;
} else
      System.out.println("Wrong !!! \nThe correct answer is : " + result);
  • 有一种特殊情况,如果用户一开始输入的想要做的题目数量是0的话,直接结束程序!
if(num==0) {
            System.out.println("答题结束 !!!");
        }
        else{
            System.out.println("答题完毕 !\n 你的正确率为 :" + accuracy + "%");
        }  

4、运行过程截图

5、代码托管地址

6、遇到的困难及解决方法

  • 问题1:最初生成题目的时候,做了几道都没有出现过除法题,本来我俩都以为只是概率问题,碰巧赶上了而已,然而不论生成多少题,结果还是没有

  • 问题1解决方法:我想到我之前在写C语言的小学生计算辅助系统的时候,生成随机数用的是rand()%n+1,这里的 n 指的就是想要生成的范围,但是它是从0开始的,所以后面要+1 !果然,下图的那个产生随机数的范围果然少写了一点,将3改为4后,问题解决了~

  • 问题2:在进行边界测试的时候,我在输入要做的题目数量处输入了边界值 0 ,结果第一行虽然显示了答题结束,但正确率处出了问题,如下图:

  • 问题2解决方法:我们用if-else条件语句将这种特殊情况单列出来,代码在此:

if(num==0) {
            System.out.println("答题结束 !!!");
        }
        else{
            System.out.println("答题完毕 !\n 你的正确率为 :" + accuracy + "%");
        }

结果如图:

7、PSP |Personal Software Process Stages)

| 预估耗时(分钟))| 实际耗时(分钟)|
---|---|---|---
Planning| 计划| 30| 30
Estimate| 估计这个任务需要多少时间| 90| 120
Development |开发| 40|60
Analysis| 需求分析 (包括学习新技术)| 30 |40
Design Spec |生成设计文档| 10|15
Design Review| 设计复审 (和同事审核设计文档)| 25| 20
Coding Standard |代码规范 (为目前的开发制定合适的规范)| 15| 30
Design| 具体设计| 60| 75
Coding| 具体编码| 100|125
Code Review| 代码复审| 30| 25
Test| 测试(自我测试,修改代码,提交修改)| 50| 75
Reporting| 报告|10|20
Test Report |测试报告| 20 |25
Size Measurement| 计算工作量| 10| 20
Postmortem & Process Improvement Plan| 事后总结, 并提出过程改进计划 |60 |80
合计| |580|825

8、对结对的小伙伴做出评价(重点指出需要改进的地方)

这次结对学习反映出了很大的问题,最重要的一点就是我们俩的时间经常错开,能坐在一起讨论的机会并不多,也只有晚上。原因是最近的事情太多了,很多事做不完,希望今后事情少的时候能多讨论交流~

9、结对编程照片

posted @ 2018-04-15 23:21  磁暴魔王特斯拉  阅读(113)  评论(0编辑  收藏  举报