结对编程四则运算第三周-挑战出题(20172301、20172304、20172328)

结对编程四则运算第三周-挑战出题

设计思路

  • 1.关于题目等级类的设计(Arithmetic类):
  • 题目类的设计中我们确定了四个等级的题目,分别是一级20(过程量)以内加减法,二级20(过程量)以内乘除法,三级20(过程量)以内加减乘除混合运算,并且实现括号的随机插入,四级题目实现分数的加减乘除。

  • 在该类中调用了RationalNumber类,即分数基本内容。重新添加了一个fraction方法,让其随机输出真分数。

-
2.关于中缀表达式转后缀表达式的设计(Convert类):
  • 首先,我们要清楚为什么要把中缀表达式转换为后缀表达式。
  • 其实是为了计算机更好的计算。如果按照正常的运算顺序,计算机无法判断1+2*3优先计算哪个。所以,我们必须人为地进行优先级排序,把1+2*3转换为123*+这样计算机就懂了原来先做乘法哦。
  • 那么,如何实现中缀表达式转换为后缀表达式呢?
  • 大致的思路是这样。我们要定义一个字符串和一个栈。因为我们最后输出的东西——后缀表达式,是一个字符串。根据刚刚的例子123*+。我们应该能够发现,当我们判断一个中缀表达式的时候,应该把数字直接划入字符串,符号入栈,然后再依次弹出。
  • 通过StringTokenizer类把字符串进行分割。
  • 之后,要比较栈里面符号优先级的顺序。把后入栈的符号和栈内的符号进行比较。如果后入的优先级高,那么就入栈;反之,则弹出栈内的符号后入栈。
-
3.关于后缀表达式求值的设计(Comparision类): - 首先,我都把数字转化为Rationalnumber类型。**整数就是分母为1的分数。** - 然后,通过**switch语句**,来分别调用Rationalnumber类的+-*/方法。
-
4.关于面向用户输出的设计(ArithmeticTest类): - 首先因为是和用户交互的类,所以引入了Scanner类。 - 其次再让用户选择其想要做的题目等级数和想要做的题目数,最后在每一次结束后询问用户是否想继续做题。 - 在实现过程中运用了swithch语句来高效定位,用which语句来创造循环来问用户还想不想继续做题; - 运用新的convert类对象和Comparision类对象去计算随机生成的题目答案并对比用户输入的答案,提示用户正确与否,然后导入两个DecimalFormat类NumberFormat类,计算正确率并格式化输出。 - 最后写入文件的实现也是在该类中完成的,实现了将随机生成的题目和用户输入的答案写入到文件。
-
5.关于括号添加的设计和遇到的困难和解决: - 有关括号的内容我(小组成员段志轩)一开始想用ascii码和循环进行,具体步骤是先利用循环和charAt方法,找到符号的索引并存在数组里。然后通过随机数通过索引随机调用数组中的符号,然后在利用索引根据符号的相对位置插入前后括号。但是后来在运行时发现在处理两位数的时候会有错误。于是否掉了这个方案进行表示,但是后来在实际运行时发现不行。 - 于是后来改变了思路。就是在生成的计算式中的空格中做一些处理。生成计算式时在空格中设置一个随机数调用事先创建的数组。数组中只有两个元素。一个是空格,另一个就是带括号的两个随机数加和。
- 6.关于分数的设计实现理念: - 通过`StringTokenizer`类把`a/b`以`/`分开。分别判断整数(分母为1)和分数的时候。

扩展需求

  • 关于将题目写入文件: - 首先用java.io包中的FileWriter类创建一个叫xieru的对象,然后在定义两个ArrayList类; - 然后在每一个case子句中将随机生成的题目添加到列表里面,然后再用ArrayList类的get方法找到具体对应的题目和用户输入答案,用for循环一个一个的写进去。 - 在for循环里面将两个数组按照制表符写入文件,可以排列整齐清晰。 - 关于从文件中读题:创建了一个新类ReadAndJudge想从我之前写好的文件中读题目再设计一个数组传入Convert类去将中缀表达式变成后缀表达式,然后再去计算后缀表达式,再将文件里的用户输入的答案读出,与计算结果比较,再输出正确与否和正确率最后将正确答案和正确率写入文件。 - 嗯,想的极其美好,但是因为想美观,写入的一串随机长度题目因为能力的限制,尝试了好久(Substring方法、存数组方法)都无法成功取出随机长度的题目,还没解决。
  • 其中遇到的问题:遇到的问题就是最后阻挡的那个问题最严重的,其中还有只能写入用户的一个等级运行的问题,通过调试和修改达到了目的,但是忘记了错误截图。

项目的UML类图

❀❀❀我们的UML类图:※

相关测试过程截图

编写代码遇到的困难和解决办法

这周我们的错题都没有截图,具体的也记不大清,困难大概让我总结一下:如果需要具体的话可以去我们三个人前几周的博客去看。谢谢谢谢Thanks♪(・ω・)ノ

  • 1.符号类型在输出中一直相同,数字在输出中也一直相同。
  • 2.分数不能输出,在循环中实例化数组但没有实例化对象,因此无法调用个人faction方法。
  • 3.在将中缀表达式变后缀表达式的过程中,不知道怎样把前一个类中生成的表达式用进来。
  • 4.双等号错误。
  • 5.“问题九”不变错误。
  • 6.中缀变后缀中StringTokenizer类比String.toCharArray类好用的问题,分数不方便分割。
  • 7.用ASCII码判断随机输入括号进阶到一位数到瓶颈期。
  • 8.用户不知所措,哭死在不贴心的程序员面前。

项目的码云链接

码云链接

小组各个成员信息

  • 1.20172301郭恺同学:驾驶员 善于编程 善于理解 推动整体发展进度 帮助组员理清思路 做为编程过程的指引的领导
  • 2.20172304段志轩同学:驾驶员 善于创新 善于思考 解决局部难点困点 提供可行方案和需求路径 作为编程过程中的优秀首席工作者
  • 3.20172328李馨雨同学:领航员 善于提问 善于督促 督促时间有效分配 检查程序部分错误 并思考动手完善 作为后勤做的特别好的老阿姨

给出小组最终贡献度划分(按百分比给小组各成员划分贡献度,各成员贡献之和为100%)

姓名 郭恺 段志轩 李馨雨
学号 20172301 20172304 20172328
贡献率(%) 38% 32% 30%

小组各成员项目感想

  • 20172301(郭恺):总体来说难度适中,因为毕竟人多力量大,思路的碰撞可以产生很多有趣的想法,让我受益匪浅。一定程度上,锻炼了自己多角度思考问题的能力。我觉得,这个在程序设计上是十分必要的。并且,如何精简程序也是一门学问,我觉得我们应该还需要拓展自己的知识。
  • 20172304(段志轩):总的来说这次是我们第一次进行的独立编程,虽然很辛苦,但是感觉到了自身的编码功力得到了很大的提高,学习java不能纸上谈兵,还需要真刀真枪的实干。纸上得来终觉浅,绝知此事要躬行。
    这正是我们结对小组的真实写照。而且,在此次编程中,我确实感受到了结对编程的好处与实际的效果,团结就是力量,希望下次还有结对编程的机会。
  • 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 30
Test 测试(自我测试,修改代码,提交修改) 300 300
Size Measurement 计算工作量(实际时间 ) 2 2
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 10
合计 4395 5229
posted @ 2018-05-15 23:18  虹澄清晓  阅读(227)  评论(2编辑  收藏  举报
页尾