ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

结对项目

2021-10-26 02:00:57  阅读:239  来源: 互联网

标签:分数 60 结对 题目 项目 运算符 分子 分母


结对项目

软件工程 网络工程1934
作业要求 结对项目
作业目标 结对编程,合作编写程序

合作者

3219000147 林于群
3219005360 朱丹彤

Github地址

Github地址

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

设计思路

1.我们首先想到的是先把整数化分数的运算,再对分子分母进行化简,我们试图生成两个分子和两个分母来实现让整数和分数的计算可以同步。

2.键盘录入题目数值的范围是range,生成题目的数量questionNum,num(1,2,3,4)由分子分母生成分数(真分数,带分数,整数)

3.我们采用for循环来控制题目数量,每次循环产生一条题目

4.题目运算符+-/随机生成,至少1个,至多3个,用字符数组char[] operator = {'+','-','×','÷'} 来装+-×÷
5.每条题目的数值最多4个,随机4个分子和4个分母出来,用变量molecule(1,2,3,4)存放分子;denominator(1,2,3,4)存放分母;然后通过函数Fraction(分子,分母)得到分数num1/2/3/4 {当分母为1时就得到整数了,当分子>分母得到带分数}
6.通过if条件来判断运算符个数,根据运算符个数的不同开始分类讨论
(1)当运算符个数为1个时
(2)当运算符个数为2个时
(3)当运算符个数为3个时
7.结束当前题目并返回for循环开始下一个题目

代码结构


1.创建一个分数类型Fraction:Fraction a = new Fraction(分子,分母),该类支持分数和整数的存储。

avater

2.创建计算器类Calculator,主要进行四则运算表达式的计算并返回一个fractionStack.pop计算结果

(1)Stack fractionStack,数字栈,用于存储表达式中的数值
(2)Stack operationStack,符号栈,用于存储运算符和括号和带分数号
(3)Fraction calculate(String numStr),解析并计算四则运算表达式,返回计算结果

3.创建题目和答案txt文件

下面代码是题目txt文件,答案文件代码是类似的
  QuestionWrite qw = new QuestionWrite();
  qw.Write(question);//这样就直接存入txt了
  AnswerWrite aw = new AnswerWrite();
  aw.Write(answer);  

4.main函数

运行四则运算平台, 调用其余三个controller包下的方法实现完整的运算流程
(1)用for循环来出题目
(2)变量molecule(1,2,3,4)存放分子;denominator(1,2,3,4)存放分母;num(1,2,3,4)由分子分母生成分数(真分数,带分数,整数)
(3)通过if条件来判断运算符个数,根据运算符个数的不同开始分类讨论
(4)题目与答案存入目录文件里,QuestionWrite qw = new QuestionWrite();AnswerWrite aw = new AnswerWrite();

System.out.println("请输入题目中数值的范围");
 int range = scanner.nextInt();
 System.out.println("请输入你想生成的题目的数量");
 int questionNum = scanner.nextInt();

 //用for循环来出题目
 for(int i = 0;i<questionNum;i++){
      Random r = new Random();

      /* 运算符 */      
      int operatorNum = r.nextInt(3) + 1;   //随机生成运算符个数,每次1~3个
      char[] operator = {'+','-','×','÷'};  //用字符来表示运算符+-*/
      //用operator[j]来随机产生+-×÷
      int j1 = r.nextInt(4);//如果j1是1,那第一个运算符operator[j1]是-
      int j2 = r.nextInt(4);
      int j3 = r.nextInt(4);
  
      /* 数值 */
      //至多4个数值,建立4个分数的分子分母(整数可以看成分母为1的分数)
      int molecule1 =  r.nextInt(range);         //第1个分子
      int molecule2 =  r.nextInt(range);         
      int molecule3 =  r.nextInt(range);         
      int molecule4 =  r.nextInt(range);         
      int denominator1 = r.nextInt(range)+1;     //第1个分母,+1是为了防止为0
      int denominator2 = r.nextInt(range)+1;     
      int denominator3 = r.nextInt(range)+1;     
      int denominator4 = r.nextInt(range)+1;  
      //由分子分母生成分数(真分数,带分数,整数)
      Fraction num1 = new Fraction(molecule1,denominator1);
      Fraction num2 = new Fraction(molecule2,denominator2);
      Fraction num3 = new Fraction(molecule3,denominator3);
      Fraction num4 = new Fraction(molecule4,denominator4);    

      /*根据运算符个数的不同开始分类讨论*/     
      if(operatorNum == 1){ //当运算符数目是1个的时候
      //使用字符串输出题目
      String question = num1 + " " + operator[j1]+ " " + num2 + " = ";
      //除号后面不能是0
      if(operator[j1] == '÷' && num2.molecule == 0) {
            i--;
            continue;
      }
      //使用计算器算出题目答案
      Fraction answer=Calculator.calculator.calculate(question);
      //出现负数就重新产生题目
      if(answer.molecule < 0 || answer.denominator < 0) {
          i--;
          continue;
      }
      //输出题目
      System.out.println("题目" + (i+1) + ": " + question);
      //题目与答案存入目录文件里
      QuestionWrite qw = new QuestionWrite();
      qw.Write(question);
      AnswerWrite aw = new AnswerWrite();
      aw.Write(answer);
      } 
      
      //运算符为2时,同上,只有str这里不同
      if(operatorNum == 2) {
      String question = num1 + " " + operator[j1] + " "+ num2 + " " + operator[j2] + " " + num3 + " = ";
      } 

      //运算符为3时,同上,只有str这里不同
      if(operatorNum == 2) {
      String question = num1 + " " + operator[j1] + " " + num2 + " " + operator[j2] + " " + num3 + " " + operator[j3] + " " + num4 + " = ";
      } 

程序类图

测试运行

题目文件

标准答案文件

性能分析

内存空间占用

项目小结

这次项目让我们体会到了结对编程的优点,一个人编程思维有时候可能会比较局限跳不出来,和队友合作的话可以沟通交流、产生思维碰撞
,有利于问题的解决,例如在栈有关算法上,需要对分数进行处理这方面;而且有时候一些小bug队友帮忙查看的话解决也会快特别多。总之,团队合作相比一个人解决问题会轻松很多,但是前提是要有好的合作分工,所以有效沟通交流就显得尤其重要。
建议分享:我们两个一开始就有比较明确的分工,合作也很默契,遇到困难会及时交流沟通,所以整套流程下来合作很愉快,也都学会了很多东西。

标签:分数,60,结对,题目,项目,运算符,分子,分母
来源: https://www.cnblogs.com/yukidaisuki/p/15464030.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有