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

结队项目

时间:2024-09-28 15:00:39浏览次数:7  
标签:10 题目 项目 int 生成 bkt range 结队

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13230
这个作业的目标 实现四则运算程序,掌握结对合作完成项目的技巧
成员一 王佳伟3122004880
成员二 范圣林3122004735

项目地址

GitHub地址

PSP表格

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

效能分析


设计实现

代码说明

检测输入

// 检查输入的题目数量与数值范围是否可实现,并修改
    static boolean able(int n, int r) {
        if (n>10000) {
            error = "最大题数为10000";
            return false;
        } else if (n<=0) {
            error = "题数不合法";
            return false;
        } else if (range == 0) {
            error = "请给定数值范围,详细操作通过 -h 查看";
            return false;
        } else if (range<0) {
            error = "数值范围不合法";
            return false;
        } else if (range<5) {
            error = "数值范围过小,至少为5";
            return false;
        }
        return true;
    }

表达式生成

// 生成表达式,并存入题目列表
    static void subject() {
        // 运算符个数 1-3 个
        List<String> exp = new ArrayList<String>();
        int opr_n = (int) (Math.random()*3 + 1);
        switch(opr_n) {
            case 1:
                exp.add(createnum());
                exp.add(createopr1());
                exp.add(createnum());
                break;
            case 2:
                // 括号起始位置
                int bkt_s = (int) (Math.random()*3);
                // 括号结束位置
                int bkt_e = 0;
                // 无括号
                if (bkt_s == 0) {
                    bkt_e = 0;
                } else {
                    bkt_e = bkt_s + 1;
                }
                for (int i = 1; i <= 3; i++) {
                    if (bkt_s == i) {
                        exp.add("(");
                    }
                    exp.add(createnum());
                    if (bkt_e == i) {
                        exp.add(")");
                    }
                    exp.add(createopr1());
                }
                // 处理括号无意义情况
                checkbkt(bkt_s, bkt_e,exp);
                exp.remove(exp.size()-1);	// 删除最后多加入的一个运算符
                break;
            case 3:
                // 括号起始位置
                bkt_s = (int) (Math.random()*4);
                // 无括号
                if (bkt_s == 0) {
                    bkt_e = 0;
                } else if (bkt_s == 3){
                    bkt_e = 4;
                } else {
                    bkt_e = bkt_s + (int) (Math.random()*2 + 1);    // [1,3)
                }
                for (int i = 1; i <= 4; i++) {
                    if (bkt_s == i) {
                        exp.add("(");
                    }
                    exp.add(createnum());
                    if (bkt_e == i) {
                        exp.add(")");
                    }
                    exp.add(createopr1());
                }
                // 处理括号无意义情况
                checkbkt(bkt_s, bkt_e,exp);
                exp.remove(exp.size()-1);	// 删除最后多加入的一个运算符
                break;
        }
        e.add(exp);
        System.out.println(toString(exp));
        //  exp.clear();
    }

随机数获取

// 产生随机数
    public static String createnum() {
        ThreadLocalRandom rand = ThreadLocalRandom.current();
        int a = rand.nextInt(range);
        int b = rand.nextInt(range);
        if (a == 0) {
            a += (int) (Math.random()*range + 1);
        }
        if (b == 0) {
            b += (int) (Math.random()*range + 1);
        }
        if (b == range) {
            b = b-1;
        }
        num n = new num(a,b);
        easy(n);
        if (n.a == n.b) {
            return Integer.toString(1);
        }
        if (n.b == 1) {
            return Integer.toString(n.a);
        }
        return n.tostring();
    }

测试运行


题目及答案

项目小结

在本项目中,我们成功实现了一个命令行程序,能够根据给定参数自动生成小学四则运算题目,并记录相关答案。以下是我们在项目实施过程中总结的经验和教训:

成功经验

  1. 功能实现完整性:程序能够按照用户指定的数量和范围生成题目,且确保每道题目的计算过程不产生负数,符合真分数的运算规则。这增强了程序的可靠性。

  2. 用户友好的参数设计:我们设计了简洁的命令行参数,用户只需输入数量和范围即可生成题目,使用方便,减少了用户的操作负担。

  3. 高效的数据存储:题目和答案被有效地存储在文本文件中,便于后续的阅卷和统计。这种设计使得题目生成与评分分离,逻辑清晰。

  4. 准确性和可扩展性:程序支持生成高达一万道题目的功能,这使得我们的程序具有较高的可扩展性,满足不同用户需求。

遇到的挑战与教训

  1. 逻辑复杂性:在设计题目生成的逻辑时,我们遇到了如何避免重复题目的问题。经过多次讨论和调整,我们实现了通过运算符和括号的组合来有效避免重复,确保题目的多样性。

  2. 性能优化的时间消耗:在优化程序性能时,我们发现某些计算逻辑存在冗余,花费了不少时间进行代码分析与调整。最终,我们通过简化运算过程和减少不必要的重复计算,提高了整体性能。

  3. 团队协作的挑战:虽然我们的分工明确,但在一些关键功能的实现上,沟通不足导致了一些重复的工作。后期我们调整了沟通方式,增加了代码审查,最终提高了效率。

合作感受

在整个项目中,合作的过程让我体会到了团队合作的重要性。我们共同讨论、互相学习,弥补了各自的不足。通过分工合作,我们不仅提升了个人技能,还增强了团队协作能力。

总结

本项目不仅增强了我们的编程能力,更让我们体会到了从需求分析到最终实现的全过程的重要性。通过此次经历,我们意识到良好的沟通、合理的时间管理和对细节的关注是成功的关键。在未来的项目中,我们将继续保持这种合作精神,追求更高的编程水平和项目质量。

标签:10,题目,项目,int,生成,bkt,range,结队
From: https://www.cnblogs.com/aste/p/18436808

相关文章

  • 项目实战:Qt+OSG爆破动力学仿真三维引擎测试工具v1.1.0(加载.K模型,子弹轨迹模拟动画,支持
    若该文为原创文章,转载请注明出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/142454993长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…Qt开发专栏:项目实战......
  • 结对项目
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13230这个作业的目标1.加深对项目开发流程的理解2.学会在团队中沟通与合作3.进一步提升编码能力......
  • 9--苍穹外卖-SpringBoot项目中Redis的介绍及其使用实例 详解
    目录Redis入门Redis简介Redis服务启动与停止服务启动命令Redis数据类型5种常用数据类型介绍各种数据类型的特点Redis常用命令字符串操作命令哈希操作命令列表操作命令集合操作命令有序集合操作命令通用命令在java中操作RedisRedis的Java客户端SpringDataRe......
  • Vue3 + Pinia 仿抖音项目:移动端最佳实践,体验原生App般流畅
    嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法摘要:在移动端开发领域,Vue.js一直以其轻量级和易用性著称。今天,我们要介绍的是一个将Vue3和Pinia结合使用的开源项目——Douyin-Vue,这是一个模仿抖音(TikTok)的移动端短视频应用,展现了......
  • 结对项目——小学四则运算题目自动生成器
    这个作业属于哪个课程<计科22级34班>这个作业要求在哪里<结对项目>这个作业的目标<实现一个自动生成小学四则运算题目的命令行程序(也可以用图像界面,具有相似功能)>团队成员<杨富国(3122004587)、李思柔(3222004638)>Github项目地址https://github.com/wWchao-111......
  • 结对项目
    结对项目这个作业属于哪个课程计科22级12班软件工程这个作业要求在哪里作业要求这个作业的目标尝试结对编程,深入熟悉开发过程,并设计一个能自动生成小学四则运算题,还能批改题目计算分数的程序队伍成员林楦(3222004851)徐嘉炜(3122004838)Github链接:https://g......
  • Java/Spring项目中包名以“com”开头的原因分析
    一、包名的基本概念1.1什么是包名?包名是Java中用来组织类和接口的一种机制,它为类提供了一个命名空间,防止命名冲突。通过包名,开发者可以更好地管理和结构化代码。1.2包名的结构Java的包名通常遵循以下结构:反向域名:包名通常使用公司的域名的反向形式作为前缀。例如,如果......
  • 系统集成项目管理工程师笔记1 - 第一章 信息化发展
    基础知识第一章信息化发展1.1信息与信息化1.1.1信息基础信息物质、能量以及其属性的标示的集合,是确定性的增加。以物质介质为载体,传递和反映世界各种事物存在方式、运动状态等的表征。信息不是物质,也不是能力。以一种普遍形式,表达物质运动规律,在客观世界中大量存在、产......
  • Wincc7.5sp2使用VBA6-全局模板、项目模板和页面模板
    这一篇博客在新浪发表过,那边还在审核,为了避免关闭服务,在这里再次发一遍。那边的博客发表后审核期间,如果想修改是不允许的,审核时间比较长,有点不合理。前面的VBA练习,都是针对具体的项目的具体画面进行编程,在wincc项目还可以全局VBA编程和具体项目VBA编程。我边看技术文档边做练习,......
  • 实操了 AI 大模型项目落地, 程序员成功转变为 AI 大模型工程师
    根据《2024年全球人工智能行业报告》最新的数据显示,全球AI市场预计将以每年超过40%的速度增长,到2030年市值将达到数万亿美元,这也是预示着在接下来的十年到十五年里,人工智能将获得巨大的发展红利。在过去的一年多时间里,我持续关注着大模型的发展趋势,并且尽可能地进行......