一、实验目标
1)体验敏捷开发中的两人合作。
2)进一步提高个人编程技巧与实践。
二 、实验内容
1)根据以下问题描述,练习结对编程(pair programming)实践;
2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。
3)要求在结对编程工作期间,两人的角色至少切换 4 次;
4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。
三、代码规范
1、变量名不可以是关键字,尽量做到见名知意。
2、宏定义里变量名全大写。
3、函数名采用小驼峰式命名法。
4、缩进正确
5、注释简明易懂
四、设计思路
1.首先需要一个能够生成随机四则运算的类ProduceProblem
其中包括能够进行随机数的生成,随机符号的生成且将生成的数字串起来,并打印输出。
2.其次需要一个类Translate
将上一个类中生成的中缀表达式转换为后缀表达式且保存,需要定义一个栈再按照栈的操作,对式子进行遍历重排
3.再次我们需要将保存起来的表达式进行运算,及引用一个新类Count
对上述的后缀表达式进行遍历,然后运算结果
4.最后是小学生作业系统的核心,需要一个类Judge
进行作业批改,且将对错与否传递给主类进行统计,并输出概率
UML类图
五、结对编程过程
这次结对编程我和队员李相杰主要是通过QQ(屏幕分享以及语音电话)来进行沟通交流的。
六、功能模块和具体代码
1.生成随机式子的主要代码:
2.中缀转换代码
3.计算式子结果的代码
4.判断正误的代码
5.主类代码
6.在编写代码时我们遇到的问题:
(1)第一个问题就是如何不仅限于生成两个数字的加减乘除运算,解决方法即代码展示:我们想的是利用随机数来决定生成的数字个数即int m = 2 + (int) (Math.random() * 6); (每个运算式数目的个数
符号的个数就是m-1,再将生成的数字与符号交叉排序生成一个字符串。)
(2)其次在实现表达式转换时我们也碰到一个问题:就是原来的代码是当碰到“-或+”时我们会将之前保存到栈里的会弹出底部的一个接到式子上去本来觉得没有问题,但在后来的运行过程中我们发现当有两个没有括号的减法式子相连的时候如3-2*5-6
就会发生转换错误,两个减号的顺序会发生变化导致结果错误。经过讨论后我们发现我们上述的代码有一个问题就是,我们在减号碰到减号时弹出来的减号并没有接上去,且在真正算式中应该是要直到碰到“(”才会结束,所以我们将这一式子改成了while
的循环,才得以解决。
(3)刚开始我们的想法是将Translate
定为Judge
的父类借此来继承它计算出的answer
以此来比较正误,不过发现行不通。后来我两商议,反着来将Judge
作为父类,让转换类来继承判断正误这项方法。
(4)在最后进行串联的时候发现了一个比较重大的问题,就是我们该如何统计正确题目的个数。最后我们决定flag
的反复继承应用直到传递到主类中,为1即count
加一进行统计.
7.运行测试截图
六、github项目
github仓库地址:https://github.com/lw484014130/my-travel-plans.git
七、实验总结
(1)这次实验应该算是自上大学以来做的比较复杂的实验了。因为第一次接触结对编程,所以刚开始还不熟悉所以进度有点慢。但到后来逐渐熟悉操作之后就感觉结对编程比自己一个要便捷的多。
(2)对于编写代码部分还是花费了挺多时间的。由于放假时间太长导致java编程的很多知识都忘记了,通过查阅资料以及浏览别人是如何操作的才渐渐编写出来代码,并且初期代码有好多报错通过漫长的修改才能正常运行。一开始写出来的程序功能并不是很完善,通过一步步修改才满足题目要求。
(3)这次实验收获良多,首先复习了一遍java编程,对于java的知识多了一点了解,其次对于git命令进一步掌握了,同时也熟悉了github的操作。