首页 > 其他分享 >结对项目

结对项目

时间:2024-09-26 17:23:21浏览次数:4  
标签:10 结对 项目 operator1 operator2 int boolean Fraction

github地址

这个作业属于哪个课程 计科22级12班
这个作业要求在哪里 作业要求链接
这个作业的目标 结对实现一个自动生成小学四则运算题目的命令行程序
姓名 任务
郑铠洋 程序实现
彭培炎 测试

一、PSP表格

阶段 描述 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 5 5
· Estimate · 估计这个任务需要多少时间 5 5
Development 开发 160 180
· Analysis · 需求分析 (包括学习新技术) 10 10
· Design Spec · 生成设计文档 10 10
· Design Review · 设计复审 10 10
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 20 20
· Design · 具体设计 10 10
· Coding · 具体编码 60 90
· Code Review · 代码复审 10 10
· Test · 测试(自我测试,修改代码,提交修改) 30 30
Reporting 报告 60 60
· Test Report · 测试报告 40 40
· Size Measurement · 计算工作量 10 10
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 10 10
合计 225 245

二、效能分析

覆盖率:

大约85%

时间:

150ms左右可生成一次

空间:

因为要存储之前的题目以判断题目的唯一性,所以这里空间开的比较多

三、设计思路

文件结构:

程序流程:

实现逻辑:

  • 写一个Fraction类将数字转为分数结构,分母为1时为整数
  • 在createQuestion类随机分子分母,符号,并且根据符号随即添加括号
  • answerChecker用于比对答案

四、代码说明

主要的create函数

用random()随机生成

    ppublic static void create(int number, int range, List<String> exercises, List<String> answers) {

        Random rand = new Random();
        while (exercises.size() < number) {
            try{
                // 生成分子和分母,控制整数和分数的出现概率
                int[] fraction1 = generateNumberOrFraction(rand, range);
                int[] fraction2 = generateNumberOrFraction(rand, range);
                int[] fraction3 = generateNumberOrFraction(rand, range);

                // 获取分数或整数
                Fraction num1=new Fraction (fraction1[0],fraction1[1]);
                Fraction num2=new Fraction (fraction2[0],fraction2[1]);
                Fraction num3=new Fraction (fraction3[0],fraction3[1]);

                // 生成两个运算符
                char operator1 = createOperator();
                char operator2 = createOperator();

                // 随机决定是否添加括号
                boolean addBracket = rand.nextBoolean();
                boolean[] bracket1Ref = {false};
                boolean[] bracket2Ref = {false};

                // 生成题目
                String question = createBracket(addBracket, fraction1, fraction2, fraction3, operator1, operator2, bracket1Ref, bracket2Ref);
                if (!generatedQuestions.contains(question)) {
                    boolean bracket1 = bracket1Ref[0];
                    boolean bracket2 = bracket2Ref[0];
                    String answer = calculateAnswer(num1, num2, num3, operator1, operator2,bracket1, bracket2);
                    exercises.add(question);
                    answers.add(answer);
                    generatedQuestions.add(question);// 记录生成的题目
                }
            }catch (ArithmeticException e) {
                continue;
            }
        }
    }

    /*
     * 生成整数或分数,根据随机数控制出现概率
     */
    private static int[] generateNumberOrFraction(Random rand, int range) {
        // 50% 概率生成整数,50% 概率生成分数
        if (rand.nextBoolean()) {
            int numerator = rand.nextInt(range); // 生成整数
            return new int[]{numerator, 1};      // 分母为1,表示整数
        } else {
            int numerator = rand.nextInt(range);
            int denominator = rand.nextInt(range - 1) + 1; // 确保分母不为0
            return new int[]{numerator, denominator};
        }
    }

添加括号

将加入括号的频率设置成50%,对每个符号都有几率添加括号

private static String createBracket(boolean addParentheses, int[] fraction1, int[] fraction2,
                                        int[] fraction3, char operator1, char operator2, boolean[] bracket1, boolean[] bracket2) {
        String question;
        // 获取分数或整数
        double num1 = (double) fraction1[0] / fraction1[1];
        double num2 = (double) fraction2[0] / fraction2[1];
        double num3 = (double) fraction3[0] / fraction3[1];
        // 随机添加括号
        if (addParentheses && ((operator1 == '+' || operator1 == '-') && (operator2 == '*' || operator2 == '/'))
                || ((operator2 == '+' || operator2 == '-') && (operator1 == '*' || operator1 == '/')))
        {
            if(operator1 == '+' || operator1 == '-')
            {
                bracket1[0]=true;
                if(operator1 == '-' && num1<num2)swap(fraction1,fraction2);
                question = "(" + formatFraction(fraction1[0], fraction1[1]) + " " + operator1 + " " +
                        formatFraction(fraction2[0], fraction2[1]) + ") " + operator2 + " " +
                        formatFraction(fraction3[0], fraction3[1]) + " = ";
            }
            else
            {
                bracket2[0]=true;
                if(operator2 == '-' && num2<num3)swap(fraction2,fraction3);
                question =  formatFraction(fraction1[0], fraction1[1]) + " " + operator1 + " (" +
                        formatFraction(fraction2[0], fraction2[1]) + " " + operator2 + " " +
                        formatFraction(fraction3[0], fraction3[1]) + " )= ";
            }
        } else if (addParentheses) {
            bracket2[0]=true;
            if(operator2 == '-' && num2<num3)swap(fraction2,fraction3);
            question =  formatFraction(fraction1[0], fraction1[1]) + " " + operator1 + " (" +
                    formatFraction(fraction2[0], fraction2[1]) + " " + operator2 + " " +
                    formatFraction(fraction3[0], fraction3[1]) + " )= ";
        } else {
            question = formatFraction(fraction1[0], fraction1[1]) + " " + operator1 + " " +
                    formatFraction(fraction2[0], fraction2[1]) + " " + operator2 + " " +
                    formatFraction(fraction3[0], fraction3[1]) + " = ";
        }


        return question;
    }

计算答案

对加入括号的优先计算,再计算剩下的

public static String calculateAnswer(Fraction num1, Fraction num2, Fraction num3,
                                          char operator1, char operator2, boolean bracket1, boolean bracket2) {
        Fraction finalResult = new Fraction(1,1);

        if (bracket1) {
            // 先计算括号内的操作
            Fraction middleResult = applyOperator(num1, num2, operator1);
            finalResult = applyOperator(middleResult, num3, operator2);
        } else if (bracket2) {
            Fraction middleResult = applyOperator(num2, num3, operator2);
            finalResult = applyOperator(num1, middleResult, operator1);
        } else {
            // 正常顺序运算
            if((operator1 == '+' || operator1 == '-') && (operator2 == '*' || operator2 == '/')) {
                Fraction middleResult = applyOperator(num2, num3, operator2);
                finalResult = applyOperator(num1, middleResult, operator1);
            }
            else
            {
                Fraction middleResult = applyOperator(num1, num2, operator1);
                finalResult = applyOperator(middleResult, num3, operator2);
            }
        }

        return finalResult.toString();
    }

五、测试运行

题目

答案

其余测试用例

针对各个函数正确和错误以及空的测试

六、记录小结

我们第一次尝试结对任务,认为结对任务可以有效节省时间,减少差错,且对项目拥有更清楚的思路和理解。但是,在工作效率上仍有欠缺,主要涉及沟通交流

标签:10,结对,项目,operator1,operator2,int,boolean,Fraction
From: https://www.cnblogs.com/ez4bridge/p/18433749

相关文章

  • 【项目实战】生命体征监测芯片ADPD7000调试
    概要ADPD7000作为多模式生命体征监测传感器前端,可以做到心率、心电、血氧、体脂等生命体征进行实时监测。极小的封装及强悍的功能用在小小的手表手环上,就可以测量出人体的多项数据。以下技术实现过程,具体一定驱动基础的伙伴能秒懂。技术细节硬件原理:驱动配置:以上P4_......
  • 【项目实战】精准监测睡眠数据的进化之路
    项目场景:睡眠是人体正常生理活动的一部分,对人体的健康和身体功能恢复具有重要作用。睡眠监测功能已成健康手表手环等穿戴设备标配。在价格高度敏感的深圳电子消费市场,硬件配置的高低,使用算法的成熟度也能极大影响到睡眠数据精准度,但这都不是本文讨论的重点。全文主要探讨如何......
  • 结对项目
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13230这个作业的目标<结对合作完成项目,实现一个自动生成小学四则运算题目的命令行程序>成员1唐立伟3122......
  • 某房地产集团搭建员工培训体系项目纪实
    某房地产集团搭建员工培训体系项目纪实——完善员工培训体系,提高培训效果【客户行业】房地产行业【问题类型】培训体系【客户背景】某房地产公司隶属于某大型央企,主营业务涵盖房产开发、物业管理等房地产全产业链。依托央企的品牌和实力,充分发挥产业链协同、城市综合开发......
  • 某国有投资集团用人机制改革项目成功案例纪实
    某国有投资集团用人机制改革项目成功案例纪实——引入淘汰机制,优化用人机制,有效传导压力【客户行业】国有企业;金融行业【问题类型】用人机制改革【客户背景】南方某集团,是面向工业领域的综合类国有资本投资公司,集团员工数万人,部门几十个,拥有多家子公司,涉及投资运营领域广......
  • 【项目案例】嵌入式Linux比较好的10+练手项目推荐,附项目文档/源码/视频
    后台私信小雯老师,回复“嵌入式Linux项目”,免费获取以下所有项目配套源码及文档。练手项目推荐 1 智能猫眼项目功能介绍:1.人脸识别:基于百度专业的深度学习算法和海量数据训练可进行人脸识别,轻松知晓访客身份;2.智能报警:实时检测非法闯入,可以自动布防,当触发警报时实时报警,最短时间......
  • 如何在CMakeList项目中集成GNU Autotools 构建模块
    背景:我有三个工具A,B,C,其中A,B是原先MakeFile编译的工具,C是原先GNUAutotools自动编译的工具。现在希望使用CMakeList统一构建,我的目录如下:||–A|-----/src|-----CMakeList.txt|–B|-----/src|-----CMakeList.txt|–C|-----autoTool|–CMakeList.txt想要起到的效......
  • OA项目之用户管理
    1.用户管理1.1.后台接口定义分页查询用户接口定义,支持条件模糊查询;新增用户接口定义;编辑用户接口定义;删除用户接口定义;1.2.前端用户管理实现1.2.1.分页查询页面初始化<!--数据表格--><tablestyle="margin-top:-15px;"id="tb_user"lay-filter="t......
  • 【项目案例】物联网比较好的10+练手项目推荐,附项目文档/源码/视频
    练手项目推荐 1 智能小车项目功能介绍:本项目由三部分组成:应用端(微信小程序)、设备端(Hi3861)、驱动端(UPS)。1.应用端,采用微信小程序作为应用端控制界面。在开发微信小程序端之前,需要熟悉JavaScript语言、CSS语言、XML语言和JSON语言。在微信小程序端的控制小车界面中需要输入......
  • 结对项目
    结对项目项目成员及github地址郭人诵github地址:https://github.com/EIiasK/Eliask何其浚github地址:https://github.com/hugh143/hugh143这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里https://edu.cnblogs.c......