20172301 结对编程练习_四则运算 第一周 阶段总结

20172301 结对编程练习_四则运算 第一周 阶段总结

1.项目内容设计

  • 自动生成题目

    • 可独立使用(能实现自己编写测试类单独生成题目的功能)

    • 可生成不同等级题目,类似于:

     1级题目:2 + 5 =

     10 - 5 =

     之类的两个数,一个运算符的题目

  • 题目运算(判题)

    • 可独立使用

    • 实现中缀表达式转为后缀表达式并计算
      判断用户答题正误,并输出正确结果

  • 支持真分数

    • 可独立使用

    • 实现分数算式的计算

  • 题目去重(扩展需求,加分项)

    • 可独立使用

    • 实现对自动生成表达式的去重:如下

     若生成:2 + 5 =
     5 + 2 =
     为同一题目.

2.设计思路内容

  • (1).我们大致分为了五个等级:(一个等级即为一个方法)
    第一个等级:加减
    第二个等级:乘除
    第三个等级:加减乘除
    第四个等级:分数加减乘除

生成题目主要分为数字和符号两个部分。我们创建了一个char类型的数组来保存加减乘除符号。然后通过随机数随机得到数组的索引来进一步得到加减乘除符号。最后通过循环来得到相应题数相应等级的题目。

  • (2).题目运算:
    这个我们考虑到记录正确和错误题数并求出正确率。需要把用户输入的答案和计算机计算的答案进行对比。而我们一般采用的都是中缀表达式,而中缀表达式的计算优先级的顺序无法正确传递给计算机。所以我们要考虑把中缀表达式转换为后缀表达式。并且把后缀表达式计算出相对结果
    所以,我们学习新知识的使用。

  • (3).支持真分数:
    真分数这个类,我们考虑用到第七章所编写的有理数计算——RationalNumber,通过其中的约分,取倒数的方法生成我们的第四个等级的题目。通过新建RationalNumber对象来调用方法。同样,在后缀表达式计算中,我们也考虑将整数转化为分母为1的分数进行计算。
  • (4).题目去重:
    对于这个加分项,我们把它看成为一个难题,因为要考虑括号的因素太过于复杂。比如1 + 2 + 3和 3 + (2 + 1)是同一题目需要去重。但是我们现在的思路是,进行逐步计算,比较其逐步计算的结果,若每一步结果相同,那么一般就是需要去重的了。不过,现在仅仅停留在思路范畴。
  • (5).添加括号:
    对于括号,我们组有一个大胆的想法,根据ASCII码进行添加。
    • 第一个思路:我们组研究发现,左括号一般要加在数字的左边,那么我们可以先添加左括号在索引0、2、4......也就是偶数位上
      然后,相对应的,我们可以以相同的长度来预测右括号的位置。
    • 第二个思路:为什么要有第二个思路呢?因为第一个有缺点。第一种只适合0-9,也就是10以内的计算。因为两位数,将会影响索引的长度。
      所以,我们通过String.spit方法把字符串通过空格拆分成一个个小部分进行计算。

3.本周 上交成果

(1).UML类图

1333022-20180501215444074-179451236.jpg

(2).编程过程中的问题和解决

  • 问题1:题目符号和数字在输出中一直是相同的?
    1333022-20180501215542761-1521040611.png

  • 问题1解决方法:在运行很多遍以后,队员发现了问题,最后几位的操作数和符号都是相同的。我们重新检查了代码,发现我们的随机数在循环之前就已经确定了,无法正确“随机”,应该把随机数定义在循环当中。
  • 问题2:分数不能输出。
    1333022-20180501215602865-842735061.png

  • 问题2解决方案:我们实例化数组却没有实例化对象,导致无法调用fraction方法。
    1333022-20180501215613436-1922116383.jpg

  • 问题3:在中缀表达式转换为后缀表达式当中,我原来的思路是通过String.toCharArray进行分割。这个字符串就会直接存到char[]中。但是,学长推荐了StringTokenizer类。随后,我也发现了我原来思路的问题。遇到两位数,或者是分数,就不能正确的分割。会影响到后续的计算。
    1333022-20180501215623832-1364092402.png

  • 问题3解决方法:采用StringTokenizer类进行项目。
  • 问题4:“双等号”错误。
    1333022-20180501220229959-1024395829.png

  • 问题4解决方案:我们组的李馨雨同学给出了解决方案。因为等号放在了循环里面,应该放在result里面。
    1333022-20180501220257494-56194117.png
    1333022-20180501220305293-787075390.png

  • 问题5:在括号方面,我们的思路是通过ASCII码编写,但是,随着项目的进行,我们发现,ASCII码方法具有局限性。对于两位的,无法显示ASCII码的怎么办。
  • 问题5解决方案:我们暂时没有更好的方法,在保持原有思路的情况下。如果到最后我们还是没有头绪的话,可能要重新进行思考。

(3).感受

总体来说,第一次小组任务还是比较成功的。组员之间非常协调和团结。在一些理论细小的地方,李馨雨同学会指出错误。而在一些难点,类似括号,段志轩同学往往能有一些大胆的想法,和我能够不谋而合。但是,我们的前期构思还是不够全面,总是需要大面积的修改。这可能和我们天马行空的想法有关?我希望我们组能多些创新,大胆尝试,即使有时候全面推倒重新构思会很疲惫,但是,那种思考,想法的碰撞的感觉让人热血沸腾。

PSP时间统计

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划6065
Estimate估计这个任务需要多少时间32
Development开发20003000
Analysis需求分析 (包括学习新技术)350300
Coding Standard代码规范 (为目前的开发制定合适的规范)6010
Design UML设计项目UML类图6060
Coding具体编码15002000
Code Review代码复审3030
Test测试(自我测试,修改代码,提交修改)300300
Size Measurement计算工作量(实际时间 )22
Postmortem & Process Improvement Plan事后总结, 并提出过程改进计划3010
合计43955229

转载于:https://www.cnblogs.com/gk0625/p/8977740.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值