结对编程项目-四则运算-第二周阶段总结 20162305
需求分析
- 四则运算的需求,我认为是能够产生有关四则运算的算式并且计算正确率。四则运算的数据类型也不局限于整数,应该也包含有分数。
设计思路
- 上周我简单写了一个代码,能够实现最简单的四则运算,不过这个运算只能针对整数去运算,功能十分不完整。这周我重新构思了一下这个程序。我将运算分为四级:第1级,实现最简单的100以内整数的加减法;第2级,实现50以内整数的乘除法;第3级,实现分数的加减乘除,分子和分母都取0-50范围以内的整数;第4级,实现带有括号的算式的四则运算。预算结束后,代码统计正确题目数量,并计算正确率。
- 有了这个思路,我就开始着手去做。我的想法是利用if循环来判断用户输入的等级(共有4个等级,1、2、3、4)。根据不同的等级if循环进入不同的部分。在循环最开始,输入所需要的题目的数量,把这个数量赋给定义好的变量number,这个变量用于确定产生题目的数量以及用于计算用户计算的正确率。
- 下面再说说四个等级的运算。第1级和第2级思路相同,我先在循环中产生两个随机数用于计算,再定义一个string数组,数组中存放运算符,通过随机数op来确定算式中需要的运算符。有了运算数和运算符,生成算式。在算式生成了以后,先进行计算并把正确值放在变量key中,在将用户输入的answer值与key比较,相等后在表示正确题目数量的right加1,不等输出提示错误并附上正确的值。循环结束后,利用right和number计算正确率rate。最后提示测试结束并附上正确率。
- 第3级是进行分数运算。我设计了一个分数类,这个分数的类中定义了产生分数的方法和分数计算的方法,所以我认真看了教材后就直接把这个类拿来用了。我利用教材中的分数类,在第三个循环中,利用随机数随机生成分子分母,并将两个分数用于运算。运算符的产生方法和上面的一样。为了比较和输入方便,我将输入值和正确值都转化为string类型,这样既能直接输入分数,又能直接去比较,之前我因为没有想好这个部分,一直将输入的值定义为int类型而导致运行错误。最后统计正确题目数量和正确率。
- 第4级是带有括号的分级运算。老师在课堂上讲过后缀表达式的相关知识,带括号的分级运算就是讲我们平时最常使用的中缀表达式转化成后缀表达式然后进行计算。我先写了一个实现后缀表达式计算的evaluator类,这个类之前学习dc时也涉及到过。后缀表达式能够计算,可是用户看见的是中缀表达式,所以这里还需要一个中缀表达式转化为后缀表达式的类。这两个类都利用栈的相关知识得以实现。我又弄了一个operator类,来规范运算符和括号,防止生成<((2-58*1>这样的算式。准备好这些,我将这些方法应用到第四个循环中,能够产生一个固定长度的分级运算式,最后统计正确的数量计算正确率。
- UML类图
有关分数
- 设计一个分数类,首先定义了分数的分子和分母。在类中,又定义了四种计算方法,利用get方法得到分子和分母的具体的值进行计算。这个类中既包含了真分数也有假分数,都能够参与到计算中去。特别的是,类中也产生了分数的倒数,这个倒数也方便计算分数的除法。
(分数类的截图)
实现过程中的关键代码解释
(核心代码解释截图)
- 在第三个循环当中,我开始是用scan.nextInt方法得到answer,将输入的数值类型和分数类型不统一,导致出现了错误。后来我利用InputStreamReader和BufferedReader这两个类中的方法,再利用readline方法读取输入的值。answer的类型转换成string类型。接着,我又将表示正确结果的key变量(RationNumber)用toString方法转化成string类型,相同类型的数值可以实现比较,代码得以正常运行。
运行过程截图
代码托管
遇到的困难和解决办法
- 困难1:有关分数类中的各种方法。
- 解决办法:分数类中定义了各种方法,我对此不是十分理解。陈是奇同学和我在课余时间一起学习讨论了这些方法,让我理解了很多,也明白了各种方法的意义。
- 困难2:如何实现中缀转化为后缀?
- 解决办法:我和陈是奇对这部分的知识不是很熟,我后来又请教了张旭升同学,他对这部分的知识掌握得很好,他详细地给我讲解了后缀表达式和如何利用栈将中缀表达式转化成后缀表达式。通过他的讲解我感觉明白了很多,在此感谢张旭升同学。
对结对伙伴做出的评价
- 我的伙伴陈是奇在本次结对当中给了我一些帮助,我们两个结对编程的过程中感觉收获良多。我们两个一起学习的过程就是共同进步的过程,希望以后的学习中我们都能共同努力,互相帮助,取得更大的进步。
一些感想
- 在本次结对编程当中,我学习到了很多的知识。结对过程中,我和结对伙伴一起编程,这是个十分奇妙的过程,这个过程我们一起研究一起学习,学到了很多知识。为了能做好这次编程活动,我在课下和结对编程之余也看了很多相关的资料和知识,也学到了很多。遇到问题不能耽搁,要想办法及时去解决,我这次编程还有很多功能没有实现,我还需要继续完善。
PSP2.2 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 45 |
Estimate | · 估计这个任务需要多少时间 | 600 | 750 |
Development | 开发 | 20 | 20 |
· Analysis | 需求分析 (包括学习新技术) | 30 | 30 |
· Design Spec | 生成设计文档 | 50 | 60 |
Design Review | 设计复审 (和同事审核设计文档) | 60 | 60 |
· Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 70 | 60 |
· Design | · 具体设计 | 140 | 110 |
· Coding | · 具体编码 | 120 | 150 |
· Code Review | · 代码复审 | 50 | 50 |
· Test | · 测试(自我测试,修改代码,提交修改) | 40 | 40 |
Reporting | 报告 | 60 | 70 |
· Test Report | · 测试报告 | 20 | 20 |
· Size Measurement | · 计算工作量 | 30 | 40 |
· Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 10 | 20 |