20172328结对编程四则运算第二周-整体总结

设计思路

  • 1.以Arithmetic为主类,在其中编写有关的四个等级题目方法最后在这周实现了有括号的方法并加在了等级三题目中。
  • 2.Convert类是中缀转后缀的类,Comparision是后缀表达式计算的类。通过在方法头中传参实现计算全过程。
  • 3.ArithmeticTest是面向用户类,通过用户的选择和做题,程序随机按照用户所选产生的各级题目以及比对给出用户结果,最后计算出用户的正确率。
  • 4.Arithmetic类中主要运用循环和Random类来产生随机数和随机符号,Convert类中主要通过栈和数组的共同应用来解决中缀表达式变后缀表达式。Comparsion类中也是用栈来进行计算从而得到后缀表达式结果。ArithmeticTest类是最能体现程序应用的一个面向用户类,里面创建了各个类的对象,用Scanner类与用户交互,用Convert类和Comparsion类帮用户判题,用DecimalFormat;NumberFormat类来格式化用户答对题的百分数。用Swithch-case语句来找到各个级别的题目。

扩展需求

  • 1.这周我们小组开始研究如何将题目写入文件并从文件中读题判题,然后再写入文件的这个拓展需求。暂时还没有写出来。可能在新的一周内会研究去重问题。

遇到的困难和解决办法

  • 1.当输入答案正确的时候直接跳出,不正确答案没有提示也没有继续。

  • 问题1解决方案:在Arithmetic类里面重载了一个toStrng方法,因为在面向用户类里面使用的方法需要的参数不一样。所以需要再加上一个toString方法。
  • 2.当我们把正确率加上后,我们的程序在运行时遇到分数出现了错误。

  • 问题2解决方案:我们的分数最终转换出来是字符串型的,所以在前面应该定义一个字符串型变量c1来储存,然后再去与后缀计算结果比对。

  • 3.当我在改正问题二时只改正了c1 = scan.next();而没有改正if (ben.calculator(lastexpression).equals(String.valueOf(c1)))所以出现了我的用户哭死在我面前系列!

  • 问题3解决方案:我初始化的c是0,所以当我没有去改正后面语句中的c1时,出现了用户即使作对了题目也判断出错的问题,因为程序一直将用户输入的字符串与数值0比较,肯定就不相同了。最后改正成功。

三人贡献度表格

姓名 郭恺 段志轩 李馨雨
学号 20172301 20172304 20172328
贡献率(%) 38% 32% 30%

关键代码

  • Arithmetic类(生成题目类)
package 结对编程;
import java.util.ArrayList;
import java.util.Random;public class Arithmetic {char[] operator = {'+', '-', '*', '÷'};Random generator = new Random();int num1, num2, num3,num4, a;private String result="";ArrayList<String> questionName = new ArrayList<>();//  输出1级题目:+、-public String level1() {num1 = generator.nextInt(20)+1;num2 = generator.nextInt(20)+1;num3 = generator.nextInt(2);a = generator.nextInt(1);result = num1 + " " + operator[num3] + " " + num2;for (int x = 0; x <= a; x++) {num2 = generator.nextInt(20)+1;num3 = generator.nextInt(2);result += " " + operator[num3] + " " + num2;}return result;}//  输出2级题目:*、÷public String level2() {num1 = generator.nextInt(20)+1;num2 = generator.nextInt(20)+1;num3 = generator.nextInt(2) + 2;a = generator.nextInt(3);result = num1 + " " + operator[num3] + " " + num2;for (int x = 0; x <= a; x++) {num2 = generator.nextInt(20)+1;num3 = generator.nextInt(2) + 2;result += " " + operator[num3] + " " + num2;}return result;}//  输出3级题目:+、-、*、÷public String level3() {num1 = generator.nextInt(20)+1;num2 = generator.nextInt(20)+1;num3 = generator.nextInt(4);result =""+ num1 + " "+ operator[num3] + " " + num2;a = generator.nextInt(3);for (int x = 0; x <= a; x++) {num3 = generator.nextInt(4);num4 = generator.nextInt(2);num2 = generator.nextInt(20)+1;if(a!=0){result += " " + operator[generator.nextInt(2)] ;}a--;result += " "+Arithmetic.bracket() + " " + operator[num3]+ " " + num2 ;}return result;}//生成分数.public RationalNumber fraction() {int numer = generator.nextInt(20)+1;int denom = generator.nextInt(20)+1;RationalNumber a = new RationalNumber(numer, denom);if (numer > denom)if (numer % denom == 0)return a;elsea = a.reciprocal();elsereturn a;return a;}//四级题目public String level4() {Arithmetic[] fraction = new Arithmetic[5];RationalNumber[] fraction1 = new RationalNumber[5];for (int x = 0; x < fraction.length; x++) {Arithmetic a = new Arithmetic();fraction1[x] = a.fraction();}num3 = generator.nextInt(4);a = generator.nextInt(2);result = fraction1[0] + " " + operator[num3] + " " + fraction1[1];if (a > 2)for (int x = 2; x < a; x++) {num3 = generator.nextInt(4);result += " " + operator[num3] + " " + fraction1[x];}return result;}//  重写toString方法public String toString(int number) {String result1="";result1=  "问题" + number + ": " + result + " = ";return result1;}public String toString(){String result = "";result = this.result;return result;}//生成括号的方法。public static String bracket(){char[] operator = {'+', '-', '*', '÷'};Random generator = new Random();int num1, num2, num3, num4,a;String result1;String ab;String []abc=new String [2];num1 = generator.nextInt(20) + 1;num2 = generator.nextInt(20) + 1;num3 = generator.nextInt(4);num4 = generator.nextInt(2);ab = " "+ operator[num3]+" ( "+ (generator.nextInt(20)+1) +" "+ operator[num4]+ " "+(generator.nextInt(20)+1)+" ) ";abc[1]=ab;abc[0]=" ";result1 = num1 +abc[generator.nextInt(2)] + operator[num3]+" "+num2;return result1;}
//    public void
}
  • Convert类(中缀转后缀类)
package 结对编程;import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import java.util.StringTokenizer;import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import java.util.StringTokenizer;public class Convert {List<String> expre;   // expression 表达式Stack<String> op;   // 操作符String result = "";public Convert() {expre = new ArrayList<String>();op = new Stack();}// 中缀表达式转后缀表达式的转换方法。public String transit(String q)  // question{String a;           // a 是字符StringTokenizer tokenizer = new StringTokenizer(q);while (tokenizer.hasMoreTokens()) {a = tokenizer.nextToken();if (a.equals("("))op.push(a);         // 如果是"(",入栈else if (a.equals("+") || a.equals("-")) {if (!op.isEmpty()) {if (op.peek().equals("("))op.push(a);     // 如果栈顶"(",运算符入栈else {expre.add(op.pop());        // 先移除栈顶元素到列表中,再将运算符入栈op.push(a);}} else {op.push(a);     // 栈为空,运算符入栈}} else if (a.equals("*") || a.equals("÷")) {if (!op.isEmpty()) {if (op.peek().equals("*") || op.peek().equals("÷")) {expre.add(op.pop());op.push(a);} elseop.push(a);} elseop.push(a); // 如果栈为空,运算符入栈} else if (a.equals(")")) {while (true) {String b = op.pop();if (!b.equals("(")) {expre.add(b);} else {break;}}} else {expre.add(a);  // 如果为操作数,入列表}}while (!expre.isEmpty() && !op.isEmpty()) {expre.add(op.pop());}for (String x : expre)result += x + " ";return result;}
}
  • Comparsion类(计算后缀表达式类)
package 结对编程;import java.util.Stack;
import java.util.StringTokenizer;
// 后缀表达式求值
public class Comparision {Stack<String> stack = new Stack<String>();RationalNumber num1,num2,num3;public Comparision() {stack = new Stack<String>();}public String calculator(String q){String op1, op2, result;String a;StringTokenizer tokenizer = new StringTokenizer(q);while (tokenizer.hasMoreTokens()){a = tokenizer.nextToken();if(a.equals("+") || a.equals("-") || a.equals("*") || a.equals("÷")){// 把栈顶的操作数弹出,转换为RationalNumber类型op2 = stack.pop();num2 = conToRantionalNum(op2);// 继续把栈顶的操作数弹出,转换为RationalNumber类型op1 = stack.pop();num1 = conToRantionalNum(op1);//计算结果result = calculate(num1,a.charAt(0),num2);stack.push(result.toString());}elsestack.push(a);}result = stack.pop();return result;}public RationalNumber conToRantionalNum (String a){String numer,denom;  // numer分子,denom分母//  把分数a/b以"/"为标记分割开StringTokenizer tokenizer1 = new StringTokenizer(a,"/");numer = tokenizer1.nextToken();if (tokenizer1.hasMoreTokens())//  如果分母不为1{denom = tokenizer1.nextToken();num1 = new RationalNumber(Integer.parseInt(numer), Integer.parseInt(denom));}else//  如果分母为1{num1 = new RationalNumber(Integer.parseInt(numer), 1);}return num1;}// 计算+、-、*、÷public String calculate(RationalNumber op1, char operation, RationalNumber op2){RationalNumber result = new RationalNumber(0,1);switch (operation){case '+':result = op1.add(op2);break;case '-':result = op1.subtract(op2);break;case '*':result = op1.multiply(op2);break;case '÷':result = op1.divide(op2);break;}return result.toString();}
}
  • ArithmeticTest类(面向用户类)
package 结对编程;import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Scanner;public class ArithmeticTest1 {public static void main(String []args) {Convert bee=new Convert();Arithmetic num = new Arithmetic();Comparision ben=new Comparision();DecimalFormat fmt=new DecimalFormat("0.00");NumberFormat fmt1= NumberFormat.getPercentInstance();int a;//用户输入的等级数。int b;//用户想要做的题目数量。int c = 0;//用户算出所给题目的答案。String c1;//专门为level4设置的字符串类型的输入。int d;//用户作对的题目数。int e=0;//用户答对的题目数.int ant=1;//题目编号数字.double f=0;//求出来正确率的小数数形式。double h;//一共做的题目数量变成double型。double i;//用户做对的题目数量变成double型。String another;让用户输出y/n的Scanner类型。String lastexpression;//后缀表达式字符串型。;String luna;//转化成的正确率百分数模式。String ann;double abc;//将字符串小数点型正确率变成double型数字。//            paring abb=new paring();Scanner scan = new Scanner(System.in);System.out.println("欢迎使用四则运算题库!");do{System.out.println("请选择题目难度等级(例如:1,2,3,4):");a = scan.nextInt();System.out.println("请选择题目数量:");b = scan.nextInt();e=0;ant=1;switch (a) {case 1:for (int x = 0; x < b; x++) {num.level1();System.out.print(num.toString(ant));c = scan.nextInt();ant++;
//                            ann=abb.mmm(num.toString());//                    if()如果正确,输出恭喜答对,d++。否则输出正确答案。lastexpression= bee.transit(num.toString());if (ben.calculator(lastexpression).equals(String.valueOf(c))){System.out.println("恭喜答对");e++;}elseSystem.out.println("很遗憾,答错了"+"正确答案是"+ben.calculator(lastexpression));}h=(double)b;i=(double)e;f=i/h;luna= fmt.format(f);abc= Double.valueOf(luna);//把一个字符串表示的数字变成真正的数字.System.out.println("正确率是"+fmt1.format(abc));System.out.println();//给题目换行break;case 2:for (int x = 0; x < b; x++) {num.level2();System.out.print(num.toString(ant));c = scan.nextInt();ant++;//                    if()如果正确,输出恭喜答对,d++。否则输出正确答案。lastexpression= bee.transit(num.toString());if(ben.calculator(lastexpression).equals(String.valueOf(c))){System.out.println("恭喜答对");e++;}elseSystem.out.println("很遗憾,答错了"+"正确答案是"+ben.calculator(lastexpression));}h=(double)b;i=(double)e;f=i/h;luna= fmt.format(f);abc= Double.valueOf(luna);System.out.println("正确率是"+fmt1.format(abc));System.out.println();//给题目换行break;case 3:for (int x = 0; x < b; x++) {num.level3();System.out.print(num.toString(ant));c = scan.nextInt();ant++;//                    if()如果正确,输出恭喜答对,d++。否则输出正确答案。lastexpression= bee.transit(num.toString());if (ben.calculator(lastexpression).equals(String.valueOf(c))){System.out.println("恭喜答对");e++;}elseSystem.out.println("很遗憾,答错了"+"正确答案是"+ben.calculator(lastexpression));}h=(double)b;i=(double)e;f=i/h;luna= fmt.format(f);abc= Double.valueOf(luna);System.out.println("正确率是"+fmt1.format(abc));System.out.println();//给题目换行break;case 4:for (int x = 0; x < b; x++) {num.level4();System.out.print(num.toString(ant));c1 = scan.next();ant++;//                    if()如果正确,输出恭喜答对,d++。否则输出正确答案。lastexpression= bee.transit(num.toString());if (ben.calculator(lastexpression).equals(String.valueOf(c1))){System.out.println("恭喜答对");e++;}elseSystem.out.println("很遗憾,答错了"+"正确答案是"+ben.calculator(lastexpression));}h=(double)b;i=(double)e;f=i/h;luna= fmt.format(f);abc= Double.valueOf(luna);System.out.println("正确率是"+fmt1.format(abc));System.out.println();//给题目换行break;default:System.out.println("请检查您的输入.你输入的结果超出范围了.");}System.out.println("要继续做题吗?(y/n)?");another = scan.next();}while (another.equalsIgnoreCase("y"));System.out.println();}}

对结对小伙伴做出评价

  • 20172301:老谋深算,一丝不苟,专心致志,团结积极。

  • 20172304:创新性强,思路清晰,临危不乱,运筹帷幄。

结对编程小组照片

码云链接

我们小组的码云链接

PSP时间规划

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 65
Estimate 估计这个任务需要多少时间 3 2
Development 开发 2000 3000
Analysis 需求分析 (包括学习新技术) 350 300
Coding Standard 代码规范 (为目前的开发制定合适的规范) 60 10
Design UML 设计项目UML类图 60 60
Coding 具体编码 1500 2000
Code Review 代码复审 30 30
Test 测试(自我测试,修改代码,提交修改) 300 300
Size Measurement 计算工作量(实际时间 ) 2 2
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 10
合计 4395 5229

转载于:https://www.cnblogs.com/LXY462283007/p/9011036.html

20172328的结对编程四则运算第二周-整体总结相关推荐

  1. java周志第二周_20165325 2017-2018-2 《Java程序设计》结对编程_第二周:四则运算

    20165325 2017-2018-2 <Java程序设计>结对编程_第二周:四则运算 一.码云链接 1.Git提交日志已经实现一个功能/一个bug修复的注释说明,如图所示: 2.测试代 ...

  2. 20172316 结对编程-四则运算 第一周 阶段总结

    20172316 结对编程-四则运算 第一周 阶段总结 1.项目内容 以结对小组形式编写代码,实现以下功能: 1.自动生成题目 可独立使用(能实现自己编写测试类单独生成题目的功能) 可生成不同等级题目 ...

  3. 结对编程 四则运算 第一周小结

    需求分析 1.最主要的就是要计算出产生的式子. 2.产生式子后自然需要计算式子 3.正确判断题目 设计思路 主要是针对三个需求的设计 首先,要考虑设计两种类,一种用来生成题目,一种用来计算题目 其次, ...

  4. java 四则运算gui_结对编程-四则运算GUI的实现

    一.项目成员以及coding地址: 二.结对编程题目描述 在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI,成为一个有基本功能.一定价值的程序.在下面的 ...

  5. 张天钰 内大计算机学院,20175305张天钰Java结对编程四则运算

    Java结对编程四则运算 一.题目描述:如何对表达式进行求值运算呢 1.中缀表达式与后缀表达式(娄老师讲解) 中缀表达式就是运算符号在运算数中间的表达式,比如1+2,顾名思义,后缀表达式就是运算符在运 ...

  6. 20172307 结对编程项目-四则运算 第二周 阶段总结

    20172307 结对编程项目-四则运算 第二周 阶段总结 (结队项目码云地址) 相关过程截图(关键代码处加了注释) 编写出实现中缀转后缀的类Transform /*Transform.java 作者 ...

  7. 20172304 结对编程--四则运算实验总结

    20172304 结对编程--四则运算 结对对象 20172301 郭恺 20172328 李馨雨 需求分析 以结对小组形式编写代码,实现以下功能: 1.自动生成题目 可独立使用(能实现自己编写测试类 ...

  8. 结对编程——四则运算

    题目:某公司程序员二柱的小孩上了小学二年级,老师让家长每天出30道(100以内)四则运算题目给小学生做. 采用语言:Java 结对对象:晏桂秀           博客地址:http://www.cn ...

  9. 结对编程--------四则运算 实验总结2

    结对编程----------四则运算 实验总结2 结对对象 20172301 郭恺 20172328 李馨雨 过程截图 这个是我们编写的main,叫ArithmeticTest1主要用于生成随机等级的 ...

  10. 20165232 2017-2018-2《Java程序设计》结对编程一 第一周总结

    20165232 2017-2018-2<Java程序设计>结对编程一 第一周总结 结对对象 20165219王彦博 20165232何彦达 需求分析 实现一个程序,要求: 1 支持整数运 ...

最新文章

  1. Dalvik虚拟机与java虚拟机的区别
  2. cocos2d-x 弹出对话框
  3. 预计2021年电视出货量有所上涨,网络推广外包之下OLED大肆布局
  4. you-get 一个下载视频的好工具
  5. eventbus多个订阅_番石榴的EventBus –简单的发布者/订阅者
  6. pytorch入门使用
  7. 论文 | 《深度学习系统的隐私与安全》综述论文,187篇文献总结
  8. 启动efi_efi启动模式对比bios启动模式有哪些优势【详细介绍】
  9. Golang-import-introduce
  10. 拓端tecdat|R语言用回归构建配对交易(Pairs Trading)策略量化模型分析股票收益和价格
  11. 词法分析器【编译原理】
  12. git push 报错 pre-receive hook declined
  13. ORA-19511 ANS1017E (RC-50) Session rejected: TCP/IP connection failure
  14. GitHub下载 无法分配请求的地址_百度网盘破限速软件PanDownload复活了!60MB/s!附下载地址...
  15. 赋能数字化生命力,让企业未来焕发青春
  16. 微信小程序旋转动画,图片转动view旋转等
  17. CODE[VS] 3837 台风 题解
  18. 小猫打螃蟹-第10届蓝桥杯Scratch省赛真题第2题
  19. Fedora 9.0 官方下载
  20. jaspersoft 报表设计器简单的使用(二)

热门文章

  1. html中阳历生日转换成农历,农历转阳历换算(阴历和阳历生日转换器)
  2. netware显示没有首选服务器,NetWare下服务器配置几例
  3. dwg文件如何转换成pdf?
  4. 如何购买一只好的基金
  5. 一文读懂人工智能、机器学习、深度学习、强化学习的关系(必看)
  6. android 免root 安装xposed,xposed框架免root安装|VAExposed(xposed框架免root版本)1.97最新版 - 维维软件园...
  7. nRF51822 官方 Blinky 工程(多彩 LED)
  8. 2021-7-20 指针:强大而危险的灵魂【C++指针的应用---中下】(炉边小坐)
  9. 网页做服务器的监控界面,服务器监控页面
  10. 轻便型面部捕捉,一个APP就搞定!