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

结对项目

时间:2024-03-26 10:44:54浏览次数:33  
标签:count 结对 String 项目 int fomula calNumber decide

这个作业属于哪个课程 <软件工程2024 (广东工业大学)>
这个作业要求在哪里 <结对项目>
这个作业的目标 <团队互相合作完成一个随机生成四则运算题目的项目>

一、团队介绍

项目合作者 学号
陈境涵 3122004775
阳昊 3122007304

二、PHP表格

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

三、效能分析

  • 对应的三个测试类



四、设计实现过程

  • 1.MathExerciseGenerator类:
    • 该类主要实现参数命令行程序、将生成的四则运算表达式和答案存入对应文件,生成答案正确错误的显示文件、对命令行的检索的功能。
  • 2.CreateOperation类:
    • 该类主要实现随机运算符、自然数、分数、自然数、括号的随机生成,还包括了生成有无括号的四则运算表达式的字符串。
  • 3.Fraction类:
    • 该类实现了真分数的结构以及运算函数,有对真分数的加减乘除以及化简操作。
  • 4.TransFraction类:
    • 该类实现了对随机数的转换,将随机生成的自然数,分数,真分数转化成包括> wholeNumber,numerator,denominato的真分数。
  • 5.ArithmeticOperation类:
    • 该类主要实现对有括号四则运算表达式中运算操作符的提取,并利用栈与Fraction类计算出最终运算结果。
  • 6.ArithmeticExpressionEquivalence类:
    • 该类主要利用逆波兰算法将中缀表达式转换为后缀表达式,用来观察各个式子运算顺序是否相同。
      参考链接

五、代码说明

  • 核心代码
CreateOperation
    public static int nValue;//生成题目个数
    public static int rValue;//题目中数值范围
     public static void main(String[] args) {
        int n = nValue;
        int r = rValue;
        r =10;
        Random random = new Random();
         char []operater=Operator(r);
         //System.out.println(operater);
         int []decide=Decide(operater);
         //System.out.println(Arrays.toString(decide));
         int []calNumber=CalNumber(decide,r);
         //System.out.println(Arrays.toString(calNumber));
        char[]e = Create(decide,operater,calNumber);
        System.out.println(e);

    }

    public static char[] Create(int[] decide,char[]operater,int[]calNumber){
        Random random = new Random();
        int[]hesis=new int[1];
        hesis[0]= random.nextInt(2);//选择是否添加括号
        char[] e = My_string(decide,operater,calNumber).toCharArray();//数组e储存初始式子
        boolean CorreatOperation = true;
        while(true) {//判读式子是否正确
            for (int i = 0; i < e.length - 1; i++) {
                if (e[i] == '\u00F7' && e[i + 1] == '0') {//如果式子有除以0
                    CorreatOperation = false;
                }
            }
            if (CorreatOperation) {
                break;//式子合格跳出循环
            } else {
                CorreatOperation = true;
                e = My_string(decide,operater,calNumber).toCharArray();//再次生成式子
            }
        }
        if(operater.length!=1&&hesis[0]==1){
            e = Final_Expresion(String.valueOf(e),decide,operater,calNumber,hesis);
            //System.out.println(Arrays.toString(e1));
        }
        return e;
    }
    public static char[] Operator(int r) {
        Random random = new Random();
        int operatorNumber = random.nextInt(3) + 1;//随机生成1到3个运算符
        char[] operator = new char[operatorNumber];//数组存储运算符
        for (int i = 0; i < operatorNumber; i++) {//随机生成运算符
            int randomnumber = random.nextInt(4) + 1;
            switch (randomnumber) {
                case 1://生成加号
                    operator[i] = '+';
                    break;
                case 2://生成减号
                    operator[i] = '-';
                    break;
                case 3://生成乘号
                    operator[i] = '\u00D7';
                    break;
                case 4://生成除号
                    operator[i] = '\u00F7';
                    break;
            }
        }
        return operator;
    }
        public static int[]Decide(char [] operater){

        int operatorNumber=operater.length + 1;
        Random random = new Random();
        int calnumber = 0;
        int[] decide = new int[operatorNumber +1];//数组记录决定生成自然数(记为0)或真分数(记为1)带分数(记为2)
        for (int i = 0; i < operatorNumber; i++) {//决定生成自然数或者真分数
            int randomnumber = random.nextInt(3);
            if (randomnumber == 0) {
                decide[i] = 0;
                calnumber++;//自然数在数组中需要一位储存
            } else if (randomnumber == 1) {
                decide[i] = 1;
                calnumber = calnumber + 2;//真分数需要两位储存
            } else {
                decide[i] = 2;
                calnumber = calnumber + 3;//带分数在数组中需要三位储存
            }
        }
        decide[decide.length-1]=calnumber;
        return decide;
    }

       public static int[]CalNumber(int[]decide,int r) {
           Random random = new Random();
           int calnumber = decide[decide.length - 1];
           int[] calNumber = new int[calnumber];//数组储存要进行运算的数字
           int j = 0;
           for (int i = 0; i < calnumber; ) {//随机生成数字
               if (decide[j] == 0) {//生成自然数
                   int randomnumber = random.nextInt(r-1)+1;
                   calNumber[i] = randomnumber;
                   j++;
                   i++;
               } else if (decide[j] == 1) {//生成真分数
                   int[] faction = ProperFaction(r, 0);
                   for (int i1 = i; i1 < i + 2; i1++) {
                       calNumber[i1] = faction[i1 - i];
                   }
                   j++;
                   i = i + 2;
               } else {//生成带分数
                   int[] faction = ProperFaction(r, 1);
                   for (int i1 = i; i1 < i + 3; i1++) {
                       calNumber[i1] = faction[i1 - i];
                   }
                   j++;
                   i = i + 3;
               }
           }
           return calNumber;
       }
       public static String My_string(int[]decide,char []operator,int []calNumber){
           String fomula = new String();
           int count = 0;
           for (int i = 0; i < decide.length - 2; i++) {
               if (decide[i] == 0) {
                   fomula = fomula + String.valueOf(calNumber[count++]) + ' ' + operator[i] + ' ';
               } else if (decide[i] == 1) {
                   fomula = fomula + String.valueOf(calNumber[count]) + "/" + String.valueOf(calNumber[count + 1]) + ' ' + operator[i] + ' ';
                   count += 2;
               } else {
                   fomula = fomula + String.valueOf(calNumber[count]) + "'" + String.valueOf(calNumber[count + 1]) + "/" + String.valueOf(calNumber[count + 2]) + ' ' + operator[i] + ' ';
                   count += 3;
               }
           }
           //添加最后一个数值
           if (decide[decide.length - 2] == 0) {
               fomula = fomula + String.valueOf(calNumber[count++]);
           } else if (decide[decide.length - 2] == 1) {
               fomula = fomula + String.valueOf(calNumber[count]) + "/" + String.valueOf(calNumber[count + 1]);
               count += 2;
           } else {
               fomula = fomula + String.valueOf(calNumber[count]) + "'" + String.valueOf(calNumber[count + 1]) + "/" + String.valueOf(calNumber[count + 2]) ;
               count += 3;
           }
           //System.out.println(fomula);
        return fomula;
       }

    public  static char[] Final_Expresion(String fomula,int[]decide,char []operator,int []calNumber,int[] hesis){
         Random random = new Random();
        int chooseNumber1;//前括号的后一个数值
        int chooseNumber2;//后括号的前一个数值
        char[] operation = new char[0];
        int j = 0;
        int count = 0;
        while (true) {
            if (hesis[0] == 0 ) {
                operation = fomula.toCharArray();
                break;//hesis值为0则不添加括号
            }
            if(operator.length == 1){
                hesis[0] = 0;
                operation = fomula.toCharArray();
                break;
            }
            else {
                chooseNumber2 = random.nextInt(decide.length - 2) + 2;
                chooseNumber1 = random.nextInt(chooseNumber2 - 1) + 1;//随机选择
                //System.out.println(chooseNumber1);
                //System.out.println(chooseNumber2);

                if(chooseNumber1==1&&chooseNumber2== decide.length-1){
                    operation = fomula.toCharArray();
                    hesis[0]=0;
                    break;
                }else{
                    fomula = "";//清空字符串重新添加
                    for (int i = 0; i < decide.length - 2; i++) {
                        if(i==chooseNumber1-1){//添加前括号
                            if (decide[i] == 0) {
                                fomula = fomula + '(' + String.valueOf(calNumber[count++]) + ' ' + operator[i] + ' ';
                            } else if (decide[i] == 1) {
                                fomula = fomula + '(' + String.valueOf(calNumber[count]) + "/" + String.valueOf(calNumber[count + 1]) + ' ' + operator[i] + ' ';
                                count += 2;
                            } else {
                                fomula = fomula + '(' + String.valueOf(calNumber[count]) + "'" + String.valueOf(calNumber[count + 1]) + "/" + String.valueOf(calNumber[count + 2]) + ' ' + operator[i] + ' ';
                                count += 3;
                            }
                        } else if (i == chooseNumber2-1) {//添加后括号
                            if (decide[i] == 0) {
                                fomula = fomula + String.valueOf(calNumber[count++])+ ')' + ' ' + operator[i] + ' ' ;
                            } else if (decide[i] == 1) {
                                fomula = fomula + String.valueOf(calNumber[count]) + "/" + String.valueOf(calNumber[count + 1])+ ')' + ' ' + operator[i] + ' ' ;
                                count += 2;
                            } else {
                                fomula = fomula + String.valueOf(calNumber[count]) + "'" + String.valueOf(calNumber[count + 1]) + "/" + String.valueOf(calNumber[count + 2])+ ')' + ' ' + operator[i] + ' ' ;
                                count += 3;
                            }
                        }else{//添加数值
                            if (decide[i] == 0) {
                                fomula = fomula + String.valueOf(calNumber[count++]) + ' ' + operator[i] + ' ';
                            } else if (decide[i] == 1) {
                                fomula = fomula + String.valueOf(calNumber[count]) + "/" + String.valueOf(calNumber[count + 1]) + ' ' + operator[i] + ' ';
                                count += 2;
                            } else {
                                fomula = fomula + String.valueOf(calNumber[count]) + "'" + String.valueOf(calNumber[count + 1]) + "/" + String.valueOf(calNumber[count + 2]) + ' ' + operator[i] + ' ';
                                count += 3;
                            }
                        }
                    }
                    //添加最后一个数
                    if(chooseNumber2== decide.length-1){
                        if (decide[decide.length - 2] == 0) {
                            fomula = fomula + String.valueOf(calNumber[count++])+ ')';
                        } else if (decide[decide.length - 2] == 1) {
                            fomula = fomula + String.valueOf(calNumber[count]) + "/" + String.valueOf(calNumber[count + 1])+ ')';
                            count += 2;
                        } else {
                            fomula = fomula + String.valueOf(calNumber[count]) + "'" + String.valueOf(calNumber[count + 1]) + "/" + String.valueOf(calNumber[count + 2])+ ')';
                            count += 3;
                        }
                    }else{
                        if (decide[decide.length - 2] == 0) {
                            fomula = fomula + String.valueOf(calNumber[count++]);
                        } else if (decide[decide.length - 2] == 1) {
                            fomula = fomula + String.valueOf(calNumber[count]) + "/" + String.valueOf(calNumber[count + 1]);
                            count += 2;
                        } else {
                            fomula = fomula + String.valueOf(calNumber[count]) + "'" + String.valueOf(calNumber[count + 1]) + "/" + String.valueOf(calNumber[count + 2]) ;
                            count += 3;
                        }
                    }
                }
                operation = fomula.toCharArray();
                break;
            }
        }

        //System.out.println(operation);

        return operation;
    }
    public static int[] ProperFaction(int r,int t) {
        Random random = new Random();
        int[] faction = new int[2+t];
        if(t==1){//带分数
            int real=random.nextInt(r-1)+1;
            int denominator = random.nextInt(r-1)+1;//生成分母
            int numerator = random.nextInt(denominator);//生成分子
            faction[0] = real;
            faction[1] = numerator;
            faction[2] =  denominator;
        }else{//真分数
            int denominator = random.nextInt(r-1)+1;//生成分母
            int numerator = random.nextInt(denominator)+1;//生成分子
            faction[0] = numerator;
            faction[1] =  denominator;
        }
        return faction;
    }
    public static void Answer(String s){


    }
}

六、测试运行

  • 一万道题目生成


  • 答案校对



七、项目小结

  • 总结:在过去的一段时间里,我们合作完成了一个四则运算表达式项目,旨在帮助学生练习基本的数学运算。通过这个项目,我们获得了一些宝贵的经验和教训,也取得了一些成就。
    项目概述这个项目的目标是开发一个简单的四则运算表达式生成器,可以生成包含加减乘除的数学表达式,并验证用户输入的答案是否正确。我们的任务是设计算法、实现功能,并确保程序的正确性和稳定性。

成功之处

  • 清晰的需求分析:我们在项目开始阶段进行了充分的需求分析,明确了项目的目标和功能要求,为后续的开发工作奠定了良好的基础。
  • 有效的任务分工:我们根据各自的技术能力和兴趣,合理分配了任务,确保每个人都能充分发挥自己的优势,提高了工作效率。
  • 良好的沟通与协作:我们保持定期的沟通,及时交流进展和遇到的问题,共同协作解决难题,确保项目顺利进行。

需要改进之处

  • 时间规划不足:在项目进行过程中,我们有时候会遇到一些时间紧迫的情况,导致工作压力较大。下次需要更合理地规划时间,避免出现时间不足的情况。
  • 代码审查不够严格:有时候为了赶进度,我们可能会忽略一些代码细节上的问题,导致后期出现了一些bug。下次需要加强代码审查,确保代码质量。

结对感受

  • 在这次结对项目中,我们互相学习、互相支持,共同成长。通过合作,我们更加深入地了解了彼此的工作方式和思维模式,建立了良好的合作关系。

闪光点与建议

  • 对方的闪光点:我很欣赏对方在解决问题时的思维方式,总能想到一些我没有考虑到的方面,让我受益匪浅。
  • 对方的建议:在工作中,对方提出了一些关于代码优化和算法改进的建议,让项目的效率得到了提高,下次我也会更加重视这些方面。
  • 通过这次结对项目,我们不仅完成了任务,还建立了深厚的合作关系,相信在未来的工作中,我们能够继续携手并进,取得更大的成就。

标签:count,结对,String,项目,int,fomula,calNumber,decide
From: https://www.cnblogs.com/jacobchan2004/p/18096067

相关文章

  • 结对项目
    结对项目这个作业来自哪个班级https://www.cnblogs.com/Liao-Ying/p/18063083这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024/homework/13137这个作业目标结对完成一个小学运算题目自动生成的程序姓名学号廖莹3222......
  • springboot项目的目录顺序
    在idea上自动生成的springboot项目中一定要注意文件的上下顺序此时在项目运行时并不会报错但是不会执行utils下的类此时 此时 utils下的类是一个解析类可以解析一份存放在resources下的一份emp.xml文件并把解析后的数据返会给一个集合,因为此时不会执行utils下的类所以......
  • 一天涨 23k Star 的开源项目「GitHub 热点速览」
     ​在GitHub上做过开源项目的小伙伴,可能都经历过截图自己项目100Star、1000Star的时刻,但有些时候事情发生的太快来不及截图,因为可能一觉醒来就破万了。这件事看似有些天方夜谭,但放在马斯克的身上就不足为奇了。就在昨天,马斯克在GitHub上开源了Grok-1大模型,一天时间......
  • 「薪酬设计」某维修服务公司维修技术人员薪酬体系设计项目纪实
    ——搭建合理薪酬制度,有效激励维修技术人员本次薪酬体系设计项目持续的时间比较长,前后大约持续了半年时间,华恒智信团队对公司的多个模块都给予了分析,提供了建议方案,专家比较细心,服务很全面,我们对其问题诊断和方案设计都一致地肯定。在项目开展的过程中,以赵磊老师为首的咨询团......
  • 【薪酬设计】某纺织企业薪酬体系设计管理咨询项目纪实
    作为一家传统型的纺织企业,我公司在基层员工的薪酬管理方面问题重重。由于缺乏专业的人力资源知识和管理实践,我们开始寻求人力资源专家:华恒智信的帮助。华恒智信专家团队对我公司进行了为期3周的认真细致、深入缜密的调研和访谈,做出了具有较高专业性的诊断报告,提出了专业的分析......
  • [附源码]计算机毕业设计大学生创新项目管理系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图项目介绍随着高等教育的不断发展,大学生创新项目成为培养学生创新能力和实践能力的重要途径。有效的项目管理对于确保创新项目的顺利进行和高质量完成至关重要。然而,目前......
  • 【macOS】删除“登陆项 - 允许在后台”卸载残留项目
    ✨“登陆项-允许在后台”更新了macOSVentura后,系统设置页面大改除了用户登陆项管理外还可以更改“允许在后台”项目然而许多软件卸载后在“登陆项-允许在后台”会出现残留项目下面给出解决方案✨删除卸载残留“允许在后台”项目Terminal运行以下命令sudo--bash-c......
  • 基于vue+Springboot后台前后端分离项目:购物商城设计与实现(源码+文档+安装部署)
      博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书......
  • 结对项目
    结对项目这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024/homework/13137这个作业的目标完成团队协作姓名黄诃华欧文杰学号3122......
  • 结对项目
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024这个给作业要求在哪里https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024/homework/13137这个作业的目标实现一个自动生成小学四则运算题目的命令行程序合作人员......