这个作业属于哪个课程 软件工程课程
这个作业要求在哪里 结对项目
这个作业的目标 按照要求写一个四则运算生成器
成员一 罗祖文 3122004537
成员二 郑志涛 312004547
GitHub地址:https://github.com/Lzw1322/3122004537
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 10 |
· Estimate | · 估计这个任务需要多少时间 | 20 | 10 |
Development | 开发 | 980 | 1030 |
· Analysis | · 需求分析 (包括学习新技术) | 50 | 20 |
· Design Spec | · 生成设计文档 | 30 | 20 |
· Design Review | · 设计复审 | 20 | 10 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 | 10 |
· Design | · 具体设计 | 60 | 50 |
· Coding | · 具体编码 | 600 | 750 |
· Code Review | · 代码复审 | 50 | 50 |
· Test | · 测试(自我测试,修改代码,提交修改) | 150 | 120 |
Reporting | 报告 | 140 | 140 |
· Test Report | · 测试报告 | 100 | 100 |
· Size Measurement | · 计算工作量 | 20 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | 30 |
· Total | · 合计 | 1140 | 1180 |
代码说明
其中MathQuestionGenerator:负责生成随机数学问题。
FileHandler:负责将问题和答案保存到文件中。
AnswerEvaluator:负责读取文件,评估答案,并生成成绩文件。
Main:主程序入口,处理用户输入并调用其他模块。
性能分析
经过观察得出结论生成算式的时候耗时最大,消耗性能最多
于是采用了减少 I/O 操作次数,增多了一些条件判断,更改了一些代码逻辑使得性能得到了提升。
改进后如下
`public class MathQuestionGenerator {
private final Random random = new Random();
public Set
Set
while (questions.size() < num) {
String question = generateRandomQuestion(rangeLimit);
if (question != null) {
questions.add(question);
}
}
return questions;
}
private String generateRandomQuestion(int rangeLimit) {
int operatorCount = random.nextInt(3) + 1;
StringBuilder question = new StringBuilder();
for (int i = 0; i <=operatorCount; i++) {
int e1 = random.nextInt(rangeLimit) ;
int e2 = random.nextInt(rangeLimit) ;
String operator = getRandomOperator();
if (operator.equals("-") && e1 < e2) {
return null;
}
if (i == 0) {
question.append(e1);
continue;
} else {
question.append(" ").append(operator).append(" ");
}
if (operator.equals("/")) {
if(e2==0) return null;
if (e1 >= e2 ) {
return null;
}
question.append(e1).append(" / ").append(e2);
} else {
question.append(e2);
}
}
return question.toString();
}
private String getRandomOperator() {
String[] operators = {"+", "-", "*", "/"};
return operators[random.nextInt(operators.length)];
}
}`
该函数由于是生成算式模块的主要函数,在运行过程中最耗时。
测试运行
我们通过测试不断生成算式其中大有 7/0/2、0'1/2、6'0/5 等各种错式,我们不断分析各种情况改进化简函数和计算函数,将其一一排除
部分结果如下
通过部分样例测试发现成绩无误
异常处理
对文件输入输出等进行异常判断处理
小结:
本次项目通过对问题合作探讨和思路分析,成功实现了小学四则运算生成器,运用了此前学习到的性能分析和PSP时间管理,共同提出了对数据结构和算法逻辑的建议,互相学习的同时节省了很多开发时间,在项目实现时有不少困难疑题,有些功能实现起来没有想象那么容易,合作学习时最大的体会是规范代码,做好注释,这次项目合作收获良多