需求分析
1、控制运算表达式题目数量,控制题目中数值的大小
2、题目中存在分数形式要进行约分
3、运算符个数不能超过3个
4、不能出现重复题目,即两个运算表达式的计算步骤不能完全相同
5、程序同时支持计算生成的每道题目,并对结果进行约分
6、对用户所做答案进行判断,并且输出正确答案或错误答案
功能设计
基本功能
1、根据控制台输入的数字随机生成指定运算元个数和算式数目的运算符
2、重复题目查询
3、基本的四则运算功能
4、式子中的分数和最终计算结果均约分到最简
设计实现
环境
windows10+java
程序结构设计
生成问题和答案的txt文件
功能测试
控制台操作运算数的最大值、式子的运算元个数、生成的式子的个数
生成相应运算数最大值、运算元个数、式子个数存入文件questions.txt
相应的答案存入answer.txt
控制台输入答案,并检查正确与否,输出正确的数目和错误的数目,并输出相应的做正确的题号和错误的题号
查重测试
不是重复式子,查重函数的返回值为false
重复的式子,查重函数的返回值为true
后面在循环生成表达式时,只要实例化这个查重类,判断式子重复与否再在其中选择两个式子的其中一个生成即可
难点解析
查重
思路:无论表达式多长,都能分解成数次二元运算,因此把每次二元运算的两个操作数和二元运算的结果存入一个字符串即可,可以在后缀表达式计算过程中用一个空字符串来记录
如 5*(3-2)
转成字符串为 231 155
当遇到4+5 5+4 或者4*5 5*4类似的情况时,只要控制存入字符串的顺序,先存入值较小的数,再存入值较大的数,最后存入二元运算的结果
PSP记录表
总结
在这次项目中回顾了数据结构顺序栈的知识
需求全部实现,但是代码结构设计得不是很合理,经常边写边测试免得自己写乱
由于这学期忙着复习基础知识和数据结构知识参加宣讲会,想早点找到实习,因此没有多花时间优化代码结构
coding地址
https://coding.net/u/z451343010/p/MathExercises/git