20165214 结队编程项目-四则运算
20165214 第一次结队编程项目——四则运算第一周
需求分析
本周的结队编程想要实现一个四则运算系统,它可以自动生成n个计算题(本周不包括分数),其中n由我们输入。每输出一道题目,运行程序的人需要输入相应的答案,直到最后一道题做完。最后,统计正确率。
设计思路
首先,我的想法是:由于本周不包括分数,所以我干脆把除法的运算直接归到下一周的分数的运算中去(因为在数学中,两数相除也可以直接表示为分数的方式,每一个整数都可以表现为分数的形式)。所以本周结队编程我和我的队友两个人就只实现加减乘,除法我们会在下周实现的。
然后,我把程序分了三个类:主类进行运算,另外两个类分别随机产生数字和操作符。(这里有一点不好就是没有把计算的过程从主类中提取出来)
然后分别对三个类进行实现。
本周达成:
①能够随机生成n道题目,n由我们输入,最大长度可直接在程序里面修改;
②能够计算正确率并且按照百分比形式输出,取到小数点后一位。
下周的目标(扩展需求):
①加上分数运算;
②加上括号运算;
③支持简体中文、繁体中文、英语;(个人觉得这个是最简单的)
④能够查重到一定程度;
⑤能够选择计算的数字范围,输入1随机生成数的范围是110,输入2随机生成数的范围是150,输入3随机生成数的范围是1~100。
整数/多运算符(题目生成/题目运算判题)
运行截图:
码云链接
其中关键代码的解释我们注释在代码中,码云里有体现~
JUnit测试
为了实现JUnit测试,把原本程序的随机生成算式给改成手动输入算式判定结果
UML图
在画这个图的时候就一直觉得自己把计算过程放在主类真是太不好了。。不符合高内聚低耦合的标准,下周一定改正。
PSP
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 50 | 40 |
· Estimate | · 估计这个任务需要多少时间 | 600 | 652 |
Development | 开发 | 60 | 60 |
· Analysis | · 需求分析 (包括学习新技术) | 5 | 5 |
· Design Spec | · 生成设计文档 | 30 | 25 |
· Design Review | · 设计复审 (和同事审核设计文档) | 60 | 70 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 20 |
· Design | · 具体设计 | 120 | 150 |
· Coding | · 具体编码 | 60 | 60 |
· Code Review | · 代码复审 | 60 | 40 |
· Test | · 测试(自我测试,修改代码,提交修改) | 120 | 150 |
Reporting | 报告 | 60 | 80 |
· Test Report | · 测试报告 | 10 | 20 |
· Size Measurement | · 计算工作量 | 5 | 5 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 15 | 10 |
合计 | 1285 | 1387 |
遇到的困难与解决方法
本次编程遇到的很多问题我都借助API解决了,不得不再次感慨,API真是太好用了!有时候一些类的方法忘记了也不用费很多时间去找书,直接使用API就可以了。
-
问题一:编程过程中一个比较难的问题是,Java没有提供能够直接把字符串中的运算符号提取出来直接参与运算的方法
-
问题一解决方案:我调用String类的spilt(),利用正则表达式,分隔字符串从而分别把运算符号和数字抽取出来,再利用equals()方法来与运算符号进行匹配就可以了。
-
问题二:问题二刚好就是我为什么要把除法也给归到第二周的分数的原因。设想一下,如果产生一个算式
2%3+1
(这里%是除号),那么得到的结果也是分数,即这个算式跟2/3+1
是一样的。 -
问题二解决方案:所以我把除法也给归到下一周的内容上去了。
-
问题三:本周内容有一点不足就是没有加括号,加括号得考虑到很多因素(因为括号不能生成在算式两边,不能生成单边括号,还需要优先进行运算)
-
问题三解决方案:我已经对于括号的应用有思路了,下周我会开始尝试,一定要尽力弄出括号。
点评伙伴
本次我的伙伴对我们的小组做出了很大的贡献,我们两一块商量,一块编程,互相交流程序实现的方法,并一起debug。感觉还是挺不错的,有人结伴学习,互相监督,在一个人想偷懒的时候,另一个人就会拉一把,防止偷懒。而且每个人都有自己的优势,在一起工作的时候互相取长补短,对我的成长也有很大的帮助。下周我将会和我的队友再次挑战自己!