结对项目

这个作业属于哪个课程 软件工程课程
这个作业要求在哪里 结对项目
这个作业的目标 按照要求写一个四则运算生成器
成员一 罗祖文 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 generateQuestions(int num, int rangeLimit) {
Set questions = new HashSet<>();

    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时间管理,共同提出了对数据结构和算法逻辑的建议,互相学习的同时节省了很多开发时间,在项目实现时有不少困难疑题,有些功能实现起来没有想象那么容易,合作学习时最大的体会是规范代码,做好注释,这次项目合作收获良多

posted @ 2024-09-28 20:15  Lzw1322  阅读(10)  评论(0编辑  收藏  举报