一、实验目标
1)体验敏捷开发中的两人合作。
2)进一步提高个人编程技巧与实践。
二 、实验内容
1)根据以下问题描述,练习结对编程(pair programming)实践;
2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。
3)要求在结对编程工作期间,两人的角色至少切换 4 次;
4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。
三、实验过程
1)设计思路和讨论
本次的课题要求和规则如下
开发一个自动生成小学四则运算题目的命令行 “软件”。实现 输入你要出题的个数,随机产生四则运算,然后用户回答,并且进行打分。
规则:用随机数实现100以内的加、减、乘、除运算,其中和与积不能超过100,差不为负(即须大减小),商不为小数或分数(即必须整除)。要求总计输出10个运算式,每输出一个运算式,等待输入结果, 然后进行对错判断并输出。最后输出统计答对的题数与分
(1) 因为题目要求为自动生成题目的软件,所以需要一个能够生成随机四则运算的类ProduceProblem。其功能要求为能够生成随机数并用随机的四则运算的符号将生成的随机数连接起来,将结果打印出来
同时为了控制生成的题目的个数,在生成题目之前会要求从键盘输入需要生成的题目的个数。
(2)其次需要一个类Translate
将上一个类中生成的中缀表达式转换为后缀表达式且保存,需要定义一个栈再按照栈的操作,对式子进行遍历重排。(只给出题目,结果并未计算)
(3)再次我们需要将保存起来的表达式进行运算,及引用一个新类Count
对上述的后缀表达式进行遍历,然后运算结果。
(4)最后是小学生作业系统的核心,需要一个类Judge
进行作业批改,且将对错与否传递给主类进行统计。(将得到的结果和输入的结果按顺序存放后进行比对,统计其中相同的结果个数)
2)在编写代码时我们遇到的问题:
(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加一进行统计.
3)fork源仓库到自己的仓库中
4)将fork的仓库克隆到本地
5)对已有的代码进行修改和改错,并将结果commit后上传都自己fork的仓库中
5)将commit push到fork的仓库之后就可以申请pull request了,之后等待源仓库合并就可以了。
合并成功之后就可以看到原来的仓库有了更新
6)由于源仓库已经更新,为了让自己fork的仓库和源仓库实现同步,采用以下措施
7)运行测试
小结
1.在实验开始做之前,原本以为会很简单的代码部分,在实际编写的时候依然出现了很多意料之外的问题,虽然说最后都想办法解决了,但也暴露出了很多的
问题,高级程序语言是需要经常去用,去看才不会忘记的。
2.这次的实验主旨在于体验结对编程,要求通过合作完成代码的编写,无论是如何在国内登录GitHub还是之后利用GitHub实现代码管理,都出现了不少的问题,
在上网查了很多资料之后,才逐一得以解决。