结对编程java实现四则运算(张铭 吴昊)

项目简介:

实现一个自动生成小学四则运算题目的命令行程序。

项目相关要求:

使用 -n 参数控制生成题目的个数

使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围,例如:Myapp.exe -r 10

将生成10以内(不包括10)的四则运算题目。该参数可以设置为1或其他自然数。该参数必须给定,否则程序报错并给出帮助信息。

3. 生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在形如e1 − e2的子表达式,那么e1 ≥ e2

4. 生成的题目中如果存在形如e1 ÷ e2的子表达式,那么其结果应是真分数。

5. 每道题目中出现的运算符个数不超过3个。

扫描二维码关注公众号,回复: 3422356 查看本文章

6. 程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。

生成的题目存入执行程序的当前目录下的Exercises.txt文件,格式如下: 

1. 四则运算题目1

2. 四则运算题目2

……

其中真分数在输入输出时采用如下格式,真分数五分之三表示为3/5,真分数二又八分之三表示为2’3/8。

7. 在生成题目的同时,计算出所有题目的答案,并存入执行程序的当前目录下的Answers.txt文件,格式如下:

1. 答案1

2. 答案2

8. 程序应能支持一万道题目的生成。

9. 程序支持对给定的题目文件和答案文件,判定答案中的对错并进行数量统计,输入参数如下:

Myapp.exe -e <exercisefile>.txt -a <answerfile>.txt                   (实现)

统计结果输出到文件Grade.txt,格式如下:                              (未实现)

Correct: 5 (1, 3, 5, 7, 9)

Wrong: 5 (2, 4, 6, 8, 10)

 

解题思路:构造number类进行随机数以及随机运算符的产生。

                 构造calculate类进行利用后缀表达式判断运算符优先级以及表达式运算。

                 查重操作部分利用了将运算符以及运算数相比较是否相同来检查生成表达式是否相同。但是其中有个严重的问题在于会出现1+2+3与3+2+1是相同的运算表达式。

                 与其他同学商量过,借鉴了其他同学利用后缀表达式查重,利用二叉树进行判断重复的方法,但是在功能实现依旧出现问题,最后仍未解决这个问题。

关键代码:

定义运算符优先级:

出现负数情况将顺序调转:

测试截图:

生成5条表达式:   五条表达式的答案:

生成10000条表达式:   10000条表达式答案:        

PSP表格:

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

 80

 120

· Estimate

· 估计这个任务需要多少时间

100

 120

Development

开发

 1850

2230

· Analysis

· 需求分析 (包括学习新技术)

100

120

· Design Spec

· 生成设计文档

50

 80

· Design Review

· 设计复审 (和同事审核设计文档)

50

 50

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

 40

 40

· Design

· 具体设计

150

 210

· Coding

· 具体编码

900

960

· Code Review

· 代码复审

 50

 60

· Test

· 测试(自我测试,修改代码,提交修改)

300

350

Reporting

报告

 30

 40

· Test Report

· 测试报告

30

 30

· Size Measurement

· 计算工作量

 10

 10

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

 50

 30

合计

1970

2340

项目总结:这次结对编程考验了两人之间的合作,一个人编程,另外一个人可以在一旁很清晰的看见编码过程中对方的优点缺点。这样可以更好地督促两者编码能力,但是在编码过程中另外一个人观察自己编码是一件不容易的事情,总会感到十分犹豫而不动手。不过在软件开发的过程中,代码都是开放透明的,所以这一点需要调整,做到更加从容。在开发过程中遇到了许多问题,自己承认程序功能有些并未完成,依然有些bug未修复。编码能力不够过关,有些功能实现借鉴网上以及同学之间的代码从而实现。有些功能想法正确却由于自己编程能力不足而无法实现导致,就如同查重操作,在与吴昊同学交流过后认为比较运算符以及运算数是一种只解决表面的问题,但是因此也出现了一些BUG。通过这几次软件工程的作业,深刻发现到自己编码能力上的薄弱,也想更加的学好这门学科,多加的在平时日常编写更多的程序。

 github地址:https://github.com/mingzzzZZ/-

 

猜你喜欢

转载自www.cnblogs.com/mingz/p/9727375.html