20172305 结对编程项目-四则运算 第一周 阶段总结
20172305 结对编程项目-四则运算 第一周 阶段总结
结对编程的好丽友
- 20172323 王禹涵:中缀转后缀
- 20172314 方艺雯:后缀表达式的计算
- 20172305 谭鑫:中缀表达式的输出
需求分析
-
1.能随机生成由使用者确定的任意多道四则运算题目
-
2.题目的难度等级可以选择,也可以选择不做混合运算。
-
3.题目运算实现中缀表达式转为后缀表达式并计算。
-
4.可以判断正误,并计算正确率。
-
5.支持真分数的运算。
设计思路
无栈(方艺雯)
- 首先要确定生成题目的数量,可以用一个循环,使用Scanner,循环次数由用户输入的数确定。
- 算式的产生
- 写一个类实现整数的四则运算:定义两个整数numerator和denominator,利用 int nextInt(4) 方法随机输出0123四个整数,分别代表进行加减乘除运算,然后根据随机输出实现的的运算符进行numerator和denominator的加减乘除运算。
- 再写一个类实现分数的四则运算:利用书上的第七章RationalNumber和RationalTester类可以实现。
- 还需要判断正误的操作,并输出成绩和正确率。再写一个类,将运算结果与用户输入的值比较,用if-else语句输出“正确”或“错误”并利用“x++”统计正确题目个数,与题目总数相除即得正确率。
- 这种方法只是最开始的简单构思,并没有实现要求的所有功能,比如“实现中缀表达式转为后缀表达式并计算”,在老师讲完有关栈的知识后进一步构思。
有栈(方艺雯)
- 产生式子:首先,让用户选择题目的难度等级,分别对应不同数量的数字进行运算,确定随机产生的整数的个数,定义两个整数numerator和denominator代表分子和分母。分数的产生利用书上第七章RationalNumber类和RationalTest类(也可以单独调用该方法只进行分式的计算),然后调用函数StringTokenizer将分数作为一个String型的,然后同时调用产生分数和整数混合,然后用一个hasMoreTokens方法遍历所有的数,遇到String型的提出,遇到整数型的则将其作为分子,分母为1,然后将这些数存入设立的栈1中(全为分数),然后另外设立一个栈2,利用 int nextInt(4) 方法随机输出0123四个整数(产生的数量为栈1 中数字数量减一),分别代表加减乘除运算符,将数存入栈中,然后先读取栈1的一个数字,然后读取栈2的一个运算符,然后继续读取栈1的,直到读取完所有的数。然后再将这些数输出,此时这些数都是String型的分数,返回出来字符串再用next循环,一个一个分开,分数在中缀转后缀时,2/3为一个整体,转成后缀,声称出来又是一串,分开后next出来一个分数,创建一个对象自定义以/为分隔符分开。得出结果,利用RationalNumber类的reduce和gcd方法化简,结果为真分数的话会保留分数形式,假分数的话结果为整数。
- 判断正误:将用户输入的数字与计算机的结果比较,输出正误。如果答案是分数,分别比较分子分母来判断。
- 统计正确率:用一个循环,当判断正误时为正确时,正确题数加一,最后总数与题目数相除可得。
UML类图(谭鑫)
遇到的困难及解决办法
-
UML类图的编写
-
解决办法:UML类图算是编写程序的一个蓝图吧,这部分是大家商讨后,有我进行实现的,最开始没有用到栈的问题很好想,所以UML类图的编写也很简单,产生出我们组的UML类图1.0版,但是通过分析和用到栈的问题,我们又产生出一个UML类图2.0版,很不成熟,在编写产生算数式子的类的同时,进行了第三次的修改,产生出UML类图3.0版
-
输出式子的问题
-
解决办法:我们最先讨论的以问题是进行运算符和数字的交替进行,通过输入题目量进行在发那个发里面自动生成题目,但是在编写的过程中,我们觉得可以是题目量在产品代码中进行重复,每个题目等级下面进行产生一个式子的循环即可。通过对一个算数式子的分析,一个式子里面扣除等号,数字始终要比运算符多一个,所以,我们可以通过一个数配一个字符的方式进行循环,最后添加一个数以及等号就完成式子的整串输出了。
-
分式的问题
-
解决办法:对于分式,我刚开始的想法现在想想,如果那样做的话,最后肯定会被扣分的,我想分式的表示形式和两个整数的除法一样,所以在输出式子的时候,我们完全可以忽略分式的问题了。在偷偷看到别的组做的问题的时候,他们的除号用“÷”表示,所以分式的问题还得考虑。这样的话就可以很清晰的分出是整数的运算和分式的运算,同时可以进行两者的混合运算了。
结对评价
- 王禹涵:王禹涵负责的是PSP表格的制定、代码的规范性、以及最重要的对我提出的想法进行边界性的分析,算是找不足吧!由于他负责编写的是中缀转后缀的问题,感觉比较难,所以在之前就没有有太大的任务,能够转换为后缀的大问题解决就行。
- 方艺雯:方艺雯负责的是需求分析,就是把我们脑中想法进行编写输出,同时也负责运算后缀表达式的计算,对我们的不成条理的问题进行串接,感觉也比较难。
- 两位同学都很给力,一直熬夜进行程序的构思,以及理解我先编出的输出式子的代码,和两位同学进行合作编写,是自己的荣幸,一起找出问题,一起解决问题。
PSP(王禹涵)
PSP2.1 | Personal Software Process Stages | 预估耗时(小时) | 实际耗时(小时) |
---|---|---|---|
Planning | 计划 | 1 | 1 |
Estimate | 估计这个任务需要多少时间 | 20 | |
Development | 开发 | 2 | 10 |
Analysis | 需求分析 (包括学习新技术) | 2 | 2 |
Design Spec | 生成设计文档 | 1 | 1 |
Design Review | 设计复审 (和同事审核设计文档) | 0.5 | 2 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 0.5 | 0.5 |
Design | 具体设计 | 2 | |
Coding | 具体编码 | 2 | |
Code Review | 代码复审 | 1 | |
Test | 测试(自我测试,修改代码,提交修改) | 1 | |
Reporting | 报告 | 2 | |
Test Report | 测试报告 | 2 | |
Size Measurement | 计算工作量 | 1 | |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 1 |