20162301 阶段编程四则运算(挑战出题)

时间:2021-01-24 21:57:15

20162301 阶段编程四则运算(挑战出题)

需求分析

  • 能指定生成题目的数量
  • 能指定题目包含的运算符数量
  • 每次生成的题目不能有重复
  • 通过命令行参数形式指定题目要求
  • 输出题目到文件,一行一个题目
  • 操作数为个位整数,即选择范围只能是:1,2,3,4,5,6,7,8,9这9个数字
  • 操作符选择范围只能是:+,-,*,/, 还有括号

设计思路

  • 通过命令行参数形式来指定生成题目数量以及运算符数量。即通过java ExpressionGenerator <number-of-expressions> <number-of-operator> <output-file-path>来传达要求。
  • 操作数的选择只需修改之前的代码,将整数表达式中的数取值范围改为1-9。
  • 生成题目去重:生成题目去重一开始的设计思路是删除所有结果相同的题目,但是在通过测试工具测试的时候发现100道以上就没有办法继续生成下去,重复的题目太多。后来改变思路,将产生的整数表达式转换为后缀表达式,并进行排序,将排序后的结果存入一个数列中。若后生成的表达式排序后的结果与数列中的某个结果一样,则排除掉这个表达式。但是这个想法依旧存在重复,最后结对伙伴马平川同学的思路是:IntegerExpression类用来生成整数表达式并分别生成整数以及符号对应的数组,数组各个数初始为0。若自动生成某个数,那么在整数数列对应位置的数加上1。符号亦然。最后将两个数列的数字排列成新的式子,主函数中每次出题都判断是否已含有这样的式子,若不含有则将其加入到文本中。

UML图

20162301 阶段编程四则运算(挑战出题)

实现过程中的关键代码解释

20162301 阶段编程四则运算(挑战出题)

20162301 阶段编程四则运算(挑战出题)

测试方法

  • 编译命令:

    javac -d bin src/*.java
    cd bin
    java ExpressionGenerator <number-of-expressions> <number-of-operator> <output-file-path>
  • 运用老师给出的测试工具测试
  • 结果如下:
    20162301 阶段编程四则运算(挑战出题)
    20162301 阶段编程四则运算(挑战出题)

运行过程截图

20162301 阶段编程四则运算(挑战出题)
20162301 阶段编程四则运算(挑战出题)

代码托管地址

遇到的困难及解决方法

  • 问题1:去重问题
  • 解决方案:在设计思路中已提到,这周的代码重写了有三遍,最后一遍较好的代码是下午才完成的。
  • 问题2:由于电脑刚刚重装系统,所以无Java配置环境,命令行无法运行程序。
  • 解决方案:如何安装java环境
  • 问题3:使用老师给出的测试工具时命令行里提醒“...错误:找不到或无法加载主类ExpressionGenerator"
  • 解决方案:询问老师后,删除自己额外添加的package即可。

对结对伙伴的评价

  • 马平川同学总是很及时的回答我的一些问题,在编写代码的时候给予我清晰的思路,在他身上能学到很多知识。
  • 为自己的队友打分:65。前两周大部分的代码基础都是他编写的,我负责剩下比较好思考的代码还有bug的修复、总结等等。虽然我花的精力也挺多的,但写代码的部分应该更加重要一点。这周的拓展,队友给了我机会,让我在之前的基础上试着多写代码,但是我独立完成的代码出现的问题比较多:比如说思路比较混乱(也可以说是没有头绪),同样的事情反复做,代码不简洁等等,最后依旧去重问题解决的不够好(第一二次已废的代码链接留作纪念)。后来不得不让结对伙伴进行优化,将代码又一次改头换面了。确实,代码更应该值钱一点。

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(小时) 实际耗时(小时)
Planning 计划 0.5 1
Estimate · 估计这个任务需要多少时间 0.5 1
Development 开发 11 11.5
· Analysis ·需求分析 (包括学习新技术) 1.5 1
· Design Spec ·生成设计文档 0.5 0.5
Design Review ·设计复审 (和同事审核设计文档) 1 0.5
· Coding Standard ·代码规范 (为目前的开发制定合适的规范) 1 0.5
· Design · 具体设计 2 1.5
· Coding · 具体编码 2 4
· Code Review · 代码复审 1 1
· Test · 测试(自我测试,修改代码,提交修改) 2 2.5
Reporting 报告 2 2
· Test Report · 测试报告 0.5 0.5
· Size Measurement · 计算工作量 0.5 0.5
· Postmortem & Process Improvement Plan ·事后总结, 并提出过程改进计划 1 1
合计 13.5 14.5