20162323周楠 四则运算挑战出题
20162323周楠 四则运算挑战出题
需求分析
实现一个命令行程序,要求:
自动生成小学四则运算题目(加、减、乘、除)
支持整数
支持多运算符(比如生成包含100个运算符的题目)
统计正确率
四则运算——挑战出题(只出题,不判题)
题目去重
程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目
要能指定生成题目的数量
要能指定题目包含的运算符数量
-
任意两道题目不能重复,运算符的前后位置变化也算是重复,数字的前后位置变化也算是重复,这些情况统统都要排除
-可以指定需要生成多少道题目,回答不上来的题目也可以空着,订正出正确答案 -
指定生成的题目中的运算符的个数,也算是难易程度的一种,可以让生成的题目更加的智能化,有更多的选择性。
-
自动生成一个四则运算题目,输入结果,回答完问题之后判断结果是否正确,再选择是否继续答题,以此循环。
-
支持整数,并且要求能处理用户的输入,并判断对错,打分统计正确率。
-
后续的可能拓展,可以选择题目的难度等级
设计思路
实现四则运算中后缀转换类
实现四则运算后缀表达式计算类
实现四则运算生成题目并判断正误
实现四则运算选择生成题目数量并开始作答
实现四则运算指定生成题目中的运算符数量(难易度)
-
题目生成
- 可以独立使用
- 可以选择生成的题目数量
-
题目运算及正误判断
- 用到中缀表达式转后缀表达式
- 实现四则运算生成题目并判断正误
-
支持多语言系统
- 支持中文简体、英文、中文繁体
-
创建类
-
创建一个后缀表达式的计算类
-
创建一个后缀表达式转中缀表达式的转换类
-
-
指定生成题目的数量
- 输入需要多少题目,自动生成
-
指定生成题目中运算符的个数
-
题目生成并判断正误
- 题目生成后开始作答
- 不会的题目可以空着,判题时显示正确答案
- 判断正误
-
计算正确率
编写过程记录
| PSP2.1 | Personal Softwore Process Stage | 预计耗时(分钟) | 实际耗时(分钟) | 重要成长 |
|---|---|---|---|---|
| Planning | 计划 | 20 | 30 | |
| Estimate | 做这个任务需要多长时间 | 900 | 720 | |
| Development | 开发 | 360 | 360 | |
| Analysis | 需求分析(包括学习新技术) | 30 | 30 | |
| Design Spec | 生成设计文档 | 180 | 100 | |
| Design Review | 设计复审(和同事审核设计软件) | 300 | 100 | |
| Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 60 | 60 | |
| Design | 具体设计 | 300 | 240 | |
| Coding | 具体编码 | 600 | 400 | |
| Code Review | 代码复审 | 120 | 60 | |
| Test | 测试(自我测试,修改代码,提交修改) | 240 | 120 | |
| Reporting | 报告 | 120 | 60 | |
| Test Report | 测试报告 | 120 | 80 |
| Size Measurement | 计算工作量 | 20 | 20 |
| Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 60 | 30 | |
关键代码解释
public class OutPutTest { public static void main(String[] args) { IOPractice pra = new IOPractice(); try { pra.outFile(args[0], args[1]); } catch (IOException e) { System.out.println(e); } } }
- 按照要求,将题目的个数和难易程度改为以参数的形式,实现在命令行中运行
运行过程截图



运行命令
我们编写的程序可以在idea里编译运行,在bash里编译,可是无法在bash里运用老师给出的测试工具运行

代码托管地址
[结对编程](http://git.oschina.net/zyl905487045/arithmeticchallenge2322-2323)
实验过程中遇到的问题及解决思路
- 问题:我们编写的程序在idea里可以编译运行,但是在老师给出的测试工具里无法运行
![]()

- 解决方案:我们在经过了近乎半天的努力之后(各种百度,问同学,反复检查代码),对代码删删减减涂涂改改,但还是始终没有办法运行,我们俩也没有什么头绪,我们实在无法自己解决这个问题,于是就询问了老师。在老师的帮助下,我们在命令行下执行命令:
javac -encoding UTF-8 src/Arhithmetic3/*.java
再将之前的class文件删掉重新编译。最终,我们的代码能够成功运行了。
评价
- 结对编程中的两个角色
- 领航员:20162322朱娅霖
- 驾驶员:20162323周楠
我的结对小伙伴是20162322朱娅霖同学,这周的任务是首先进行需求分析,在前两周的编程学习中得到的经验和结果在这周可以接着运用,增加对自动生成的题目中的运算符的个数的指定,以此我个人觉得可以达到对难易度的要求,经过前两周的结对编程学习,我发现,平均下来,结对编程时间花销比单人编程增加不少时间,但也会比单人编程减少不少的代码BUG,已经在老师们的指点下逐步的熟悉结对编程的模式,如果再算上后期代码的维护,结对编程比单人编程更有效率,还更加节省成本。有效地避免了闭门造车,并可以减少后期的code review(代码复审)时间,在Design Review(设计复审)环节会节约时间成本,时间上算是非常的有效率了,两个人在一起结对编程,还能互相学习,从对方身上看到自己欠缺的地方,遇到困难也可以互相鼓励,共同解决,不像一个人时那样焦头烂额,耗费时间。


浙公网安备 33010602011771号