20172304 结对编程--四则运算
结对对象
- 20172301 郭恺
- 20172328 李馨雨
需求分析
以结对小组形式编写代码,实现以下功能:
1.自动生成题目
可独立使用(能实现自己编写测试类单独生成题目的功能)
可生成不同等级题目,类似于:
1级题目:2 + 5 =
10 - 5 =
分析:这个可以用生成随机数的方法来做。
- 题目运算(判题)
可独立使用
实现中缀表达式转为后缀表达式并计算
分析:这个东西是要将算式转换为计算机理解的形式进行计算。
判断用户答题正误,并输出正确结果
分析:这个初步分析是要采用equals加循环的方法 - 支持真分数
可独立使用
实现分数算式的计算
解析:这个,之前章节的例子中有生成分数的例子,可以直接引用。 - 题目去重(扩展需求,加分项)
可独立使用
实现对自动生成表达式的去重:如下
若生成:2 + 5 =
5 + 2 =
为同一题目。
解析: 因为是加分项所以本周暂时没有进行考虑,想着如果下周时间充裕就考虑一下。
代码规范
我们使用的是IDEA,有自带的缩进格式和代码规范。
设计思路
- 生成随机运算式和不同等级: 因为项目需要生成算式。所以我们用随机数方法Random生成了运算数,而将运算符使用char方法储存在了数组中,在定义一个随机数,随机抽取运算符,并且使用了循环,通过确定循环次数来确定题目等级。
总共分为四个等级
第一个等级:加减
第二个等级:乘除
第三个等级:加减乘除
第四个等级:含有分数的加减乘除。 - 题目运算:总共使用了两个栈,一个用来储存符号,一个用来储存数字。通过出栈,进栈的方式来进行将运算式由中缀表达式转为后缀表达式。
- 支持真分数
- 使用了第五章的RationalNumber类,并使用随机数来生成分子分母,并通过取余来判断是否生成的是真分数。
- 生成括号:我尝试了操作,使用的是循环加等值判断,利用charAt方法将字符串中的每一个字符的char值与加减号的char值进行比较,然后将加减号的char值储存在数组中。再通过随机数插入括号,但是在实际运用中发现这种方法在判断两位数的时候会很很麻烦。所以后来放弃了这种方法。
UML图
问题统计
- 问题1:我们在生成的题目前加了题号,但是再生成是发现题号都是9。
- 问题1解决方案:后来我们做了一个循环。如下图。
- 问题2:双等号错误,在生成算式的时候带有两个等号。
- 问题二解决方案:因为双等号一开始放在了循环里,所以会有错误,所以后来,我们将等号加在了结果里。
小组成员评价
20172301 郭恺
这是我们小组的核心和智囊。
20172328 李馨雨
这是我们小组的组织者。
相关过程截图
PSP时间统计
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 65 |
Estimate | 估计这个任务需要多少时间 | 3 | 2 |
Development | 开发 | 2000 | 3000 |
Analysis | 需求分析 (包括学习新技术) | 350 | 300 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 60 | 10 |
Design UML | 设计项目UML类图 | 60 | 60 |
Coding | 具体编码 | 1500 | 2000 |
Code Review | 代码复审 | 30 | 20 |
Test | 测试(自我测试,修改代码,提交修改) | 300 | 300 |
Size Measurement | 计算工作量(实际时间 | 2 | 2 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 10 |
合计 | 4395 | 5229 |
其他
这周是紧张的一周,各个小组都很紧张认真。我们小组也一样,不过在这种团队的合作下,我更加体会到了互帮互助的优越性以及不同思想碰撞时所产生的智慧的火花。虽然这周的目标只是将设计思路设计出来,但是我们也编写了不少代码。还有一些难点尚未攻克,不过我相信,只要我们通力合作,没有什么是不能被克服的。