实验课程:程序设计与数据结构
实验题目:结对编程-四则运算
实验日期:2017.5.12
实验成员:20162309邢天岳(结对同学20162313苑洪铭)
实验内容:编译一个程序,使其:
1. 自动生成小学四则运算题目(加、减、乘、除)
2. 持多运算符(比如生成包含100个运算符的题目)
3. 支持真分数
4. 统计正确率
5. 支持整数
指导老师:娄老师、谢老师。
实验设计思路:
对于四则运算的程序,首先要想到的是使用if、else语句,考虑到在实验要求中需要支持真分数,则需要分类进行编译。对于算式的计算,需要应用到栈的方法,对教材第14章的理解需要进行再次巩固。在如何计算出值和表达式方面,通过参考博客,需要学习逆波兰式算法,得出计算结果,由于需要判断的语句较多,则需要进行多次输入新的变量。
在设计整个实验的过程中,首先需要完成的是伪代码的编写,由于代码量比较大,在编译过程中有一定的困难,新输入的变量和调用的方法都相对较多,十分容易产生混淆,同时本次实验的代码的层次十分多,环节较为复杂,在编译过程中出现逻辑错误的可能性很高,需要进行多次编写和修改。在几个实验要求中,支持真分数运算是比较困难的一个部分,首先要确定输入值是否为真分数,这里就有了一个比较的过程。
在判断完之后将进行计算,并在最后需要加上返回语句,输出结果,同时由于一个真分数的分母不能为0,在编写过程中需要加上额外的判断语句。
在完成了这两个难点之后,判断答案并进行记录,统计正确率是总结整个代码的过程,对于答题情况的统计,同样要通过变量进行统计。
通过基本实验思路框架,可以较为系统地将代码编写完成,并完成运行。
实验过程中所遇到的困难:
1. 多运算符代码编写所需要用到的知识环节较为陌生,在编译过程中语法多次出现错误。
2. 在第一次编译过程中,已经定义了变量,但任然在idea上仍然出现较多红线,将代码原样复制到bash命令行中,再上传后再次复制回idea上则可以正常运行,检查代码并没有发现逻辑错误和语法错误。
解决方案:
多运算符问题在网上查阅资料后,仍然没有较为明确的解决方法,在与20162318张泰毓同学交流学习后,结合他在码云上的代码,完成了多运算符的代码编译,完善了代码。
编译方法为:给代码增加一个for循环语句,在不加入括号的情况下,运算符由数字、符号、数字、符号组成,将这个语句进行长度加一的循环,就完成了多运算符的计算。
结对学习情况:
本次实验,我与20162313苑洪铭结对共同完成本次实验,苑洪铭同学在java学习上基本功比较扎实,在对代码的理解上比较深入。在循环语句(是否继续进行运算)的编译上,苑洪铭同学多次调试后完成了编写。
同时,苑洪铭同学在学习上稳扎稳打,擅于结合教材内容和在网上查阅相关资料来解决代码编译过程中所遇到的问题,比如在编译统计运算结果的代码的过程中,计算总题数和计算正确的题数,这部分的代码仍然需要定义新的变量,而在出现真分数的场合对产生的随机数还有额外的需求,这里需要调用一个私有变量,用private方法,并再次定义两个变量来完成。再次定义的变量数量较多,再次进行计算时使用到了Math.random方法。
同时,苑洪铭同学在编写代码的过程中仍然存在一些小问题,本次实验的代码我们组编写的量比较大,其中多次出现的重复代码有一定的数量,使代码在整体情况上比较赘余,不够简洁,经过我们共同的检查和修改之后,最后完成了一个较为完整和明晰的程序,经测试后可以正常运行,并且符合结对编程项目的需求。
测试方法及运行结果截图:
由截图可以看出,运行是成功的,同时程序会自动识别真分数的约分情况。
结对搭档20162313苑洪铭同学博客地址:http://www.cnblogs.com/yuanhongming/
PSP表格:
PSP2.1 | Personal Software Process Stages | 预估耗时(小时) | 实际耗时(小时) |
---|---|---|---|
Planning | 计划 | 15 | 17 |
· Estimate | · 估计这个任务需要多少时间 | 8 | 11 |
· Analysis | · 需求分析 (包括学习新技术) | 2 | 2 |
· Design Spec | · 生成设计文档 | 0.5 | 0.33 |
· Design Review | · 设计复审 (和同事审核设计文档) | 0.5 | 0.5 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 1 | 1.5 |
· Design | · 具体设计 | 2 | 3 |
· Coding | · 具体编码 | 3 | 4 |
· Code Review | · 代码复审 | 2 | 1.5 |
· Test | · 测试(自我测试,修改代码,提交修改) | 1 | 1 |
Reporting | 报告 | 1 | 1 |
· Test Report | · 测试报告 | 2 | 2.5 |
· Size Measurement | · 计算工作量 | 0.5 | 0.5 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 2 | 2 |
实验总结:
本次实验是学习java以来一次较为完整和系统的考察学习情况的实验过程,通过结对实验的方式来实现。本次实验有一定的难度,考察方式较为全面,需要投入较多的时间和精力,在一些实验要求上,比如在给定的一定数量(较大)的代码输出结果中,需要为客户自动筛选出是否存在重复代码,以及多重的判断语句,
在编译上确实存在困难,本周也只是完成了一部分实验内容,一些完善工作还需要完成。通过结对编程任务,在java运用上体会到了还有很多在教材学习上没有学习到和掌握的知识,只是单纯地完成教材上的代码任务很难全面的学习,通过每周的实验任务以及随堂代码运行检查可以有效地进行巩固对学习有很大帮助。
四则运算的实验的代码量相对较多,在测试和运行时,单纯的命令行就无法较为简洁地完成了,则idea的一些好处就体现出来了,代码量大的程序idea可以更加方便地进行错误的检查,判断语法,对实验的完成有很大的帮助。