四则运算 20162315-20162317结对编程 第一周输出阶段总结
需求分析
- 实现任意个数运算数的四则运算。我们已经写过一个后缀表达式,所以我们需要将中缀表达式转化为后缀表表达式。
- 使用写过的后缀表达式计算器程序进行四则运算
- 设置一个类能输入一道小学生计算题,用户能输入答案并且系统给出评判。
- 先设计一个类,之中包含生成随机数,进行计算,在测试驱动类中类中给出用户选择题目个数的选项,然后对每一道题目进行比较,输出对错。
设计思路
在前几周的java学习中,我们曾编写过书上的一个例子:栈这一章节内的计算器。在那次编程中,我们接触了只有两个运算数的后缀表达式计算器,我们可以将这个代码完成的方法拓展成这这次的四则运算代码:
- 后缀表达式可以避免系统识别括号和运算符优先级的问题,所以这次我们的编程继续使用后缀表达式。所以程序的第一步我们需要将用户的中缀表达式转换为后缀表达式。然后植入上一次写过的代码就可以对后缀表达式进行计算并输出结果了。
- 我们编写一个计算器进行计算,是要能实现出题,用户输入和检测答案的程序。我们可以写一个类使它自动生成随机数和运算符,在驱动类里输出结果并与用户输入结果进行比较。
- 简单的出题测试里,我们实现了两个50内的随机数数的四则运算。
- 高级一点的V2里,可以实现多个运算数计算(我们限制在了6个数以内)。我们植入了编写过的中缀表达式转后缀表达式的方法。再进行后缀表达式计算。
实现过程中的关键代码解释
- 中缀表达式转为后缀表达式,我们将这个代码放在Setquesiton里面,暂时不考虑括号:例如3+3,符号进栈,再压入两个数字,这样将他们从栈中取出的时候就是33+,而多运算数中缀表达式满足符号在数字之后的形式,因此形成以下代码。
- 实现后缀表达式的计算。这个代码之前已经编写过,运用原理是识别字符或数字,计算时操作数入栈,操作符出栈。对然后用evalSingleOp中的方法进行计算。
测试运行结果
第二个运行结果体现了我们代码设计的一个不足:分数目前只能运算它的整数部分,因为我们定义的是Integer类型。
扩展需求
- 对于题目生成和判题,我们设计了一个难度划分,首先写了一个简单的,两位数进行运算,这个算是一个小学生一二年级学习的题目。在下一个版本拓展成了上限为6的计算题,这个类里面又分了级,比如上图中的2级别的难度。这个类用到了后缀表达式的转化与计算。
遇到的困难及解决方法
- 问题:如何将中缀表达式转化为后缀表达式?
- 解决方案:我们查阅了网上的相关资料最后运用了栈的方法编写了上述代码。
- 问题:最开始我们输出后缀表达式并储存在一个文件中,计算器要读取这个文件进行计算,之前程序是按字符进行读取的,如果32+4输出就会变成324+系统是无法识别到底是3+24还是32+4的。
- 解决方案:我们使用上次老师提到的split方法以空格进行分割,使输出的结果变成32 4 +,这样计算器就可以读取计算了。
代码托管地址
搭档博客地址
PSP
Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|
计划 | 20 | 40 |
·估计耗时 | 20 | 40 |
开发 | 435 | 525 |
·需求分析 | 30 | 50 |
·生成设计文档 | 20 | 30 |
·具体设计 | 30 | 50 |
·具体编码 | 300 | 320 |
·代码复审 | 30 | 15 |
·测试 | 25 | 60 |
报告 | 105 | 110 |
·测试报告 | 50 | 80 |
·事后总结,并提出过程改进计划 | 35 | 20 |
·分析下一步计划 | 20 | 10 |
合计 | 460 | 675 |