实现一个自动生成小学四则运算题目的命令行程序
这个作业属于哪个课程 | 计科22级12班 |
---|---|
这个作业要求在哪里 | 结对项目 |
这个作业的目标 | 实现一个自动生成小学四则运算题目的命令行程序。 |
一:
詹洛熙 | 3122004800 |
---|---|
GitHub链接 | (https://github.com/Zhannoi/-/tree/main) |
二:PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 20 |
· Estimate | · 估计这个任务需要多少时间 | 300 | 450 |
Development | 开发 | 100 | 150 |
· Analysis | · 需求分析 (包括学习新技术) | 60 | 50 |
· Design Spec | · 生成设计文档 | 20 | 25 |
Design Review | 设计复审 | 30 | 30 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 20 |
· Design | 具体设计 | 50 | 60 |
Coding | 具体编码 | 150 | 200 |
Code Review | 代码复审 | 60 | 50 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 40 |
Reporting | 报告 | 60 | 40 |
· Test Repor | 测试报告 | 30 | 20 |
· Size Measurement | · 计算工作量 | 20 | 10 |
· Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 20 | 10 |
· 合计 | 1010 | 1175 |
三:设计思路
主要方法
-
main(String[] args):处理命令行参数,选择生成题目或检查答案。
-
generateExercises(int num, int maxNum):生成指定数量的题目并计算答案。
-
generateExpression(int depth, int maxNum):递归生成随机数学表达式。
-
evaluateExpression(String expr):计算数学表达式的值。
-
formatFraction(String result):将计算结果格式化为真分数。
-
checkAnswers(String exerciseFile, String answerFile):读取题目和答案文件,检查正确性。
-
readLinesFromFile(String filename):从文件中读取行。
-
writeToFile(String filename, Set
content):将题目或答案写入文件。 -
writeResults(List
correct, List wrong):输出检查结果到文件。
函数之间的关系
-
main 方法是程序入口,根据输入参数选择调用 generateExercises 或 checkAnswers。
-
generateExercises 方法负责生成题目,依赖于 generateExpression 来创建表达式,最终使用 evaluateExpression 来计算答案。
-
checkAnswers 方法读取题目和答案,使用 evaluateExpression 计算题目的结果,比较并统计正确与错误的答案。
-
文件读写操作通过 readLinesFromFile 和 writeToFile 方法进行。
效能分析
关键代码
- 生成四则运算
递归生成表达式。depth 参数控制表达式的复杂度,maxNum 控制生成的数字范围。 - 计算结果
使用 Java 的 ScriptEngine 计算字符串形式的数学表达式。如果计算成功,返回结果;否则捕获异常并返回 0。 - 检查校对
逐行比较题目和答案,并统计正确与错误的题目编号。如果题目数量与答案数量不匹配,输出错误提示。比较时,调用 evaluateExpression 计算每道题目的正确答案,并与用户答案进行比较。
四:测试结果
生成10以内(不包括10)的四则运算题目10道并给出答案(-n 10 -r 10)
检验答案
输入的答案:
结果:
五:项目小结
本项目为开发一个自动生成和检验小学四则运算题目的Java程序。在项目中,提升了Java编程技能,并深入理解了递归和字符串处理。同时,过程中也遇到了一些挑战,如表达式的合法性检查与格式化输出,但通过思考与调试,成功解决了问题。通过本项目,实现了功能目标,为今后类似项目的开展积累了宝贵经验