需求分析(描述自己对需求的理解,以及后续扩展的可能性)

实现一个命令行程序,要求:

  • 自动生成小学四则运算题目(加,减,乘,除)
  • 支持整数
  • 支持多运算符(比如生成包含100个运算符的题目)
  • 支持真分数
  • 统计正确率

设计思路(同时输出UML类图)

首先要输入生成题目的数目m

  • 计算机根据输入的数目生成m道题
  • 每道题生成的数字要随机且在0~10之间,且要生成分数
  • 生成的字符也要随机且字符数在1~100之间,字符不止加减乘除,还有括号,除的时候要考虑除数不能为零
    用户输入值和计算机原本结果进行对比
  • 如果正确,则输出正确
  • 如果错误,则输出错误,正确答案为:输出答案,还应包括真分数计算
    答题结束后,计算机自动计算答题正确率

实现过程中的关键代码解释

计算生成题目

package CaculateSystem;
import java.util.Random;public class ProduceProblem {public int ProduceProblem () {String s = "";Random shu = new Random();//每个运算式的随机数int count = 1; //记录符号;char[] operator = new char[]{'+', '-', '*', '/'};int m = 2 + (int) (Math.random() * 6); //每个运算式数目的个数for (int j = 0; j < m; j++) {int num = shu.nextInt(10);s = s +" "+ num;if (count < m) {int c = shu.nextInt(4);s = s +" "+ operator[c];count++;}}String [] str = s.split(" ");System.out.println(s + "=");Translate t = new Translate(str);return t.flag;}
}

将中缀转换为后缀

package CaculateSystem;
import java.util.Stack;public class Translate extends Judge{int flag;public Translate (String[] args) {Stack<String> z = new Stack<String>();String jieguo = "";String t = "";for (int i = 0; i < args.length; i++) {switch (args[i]) {case "(":z.push(args[i]);break;case "+":case "-":while(z.empty() != true) {t = z.pop();if (t.equals("(")) {z.push(t);break;}jieguo = jieguo + t + " ";}z.push(args[i]);break;case "*":case "/":while(z.empty() != true) {t = z.pop();if (t.equals("+") || t.equals("-") || t.equals("(")) {z.push(t);break;}jieguo = jieguo + t + " ";}z.push(args[i]);break;case ")":while (z.empty()== false) {t = z.pop();if (t.equals("(")) {break;} else {jieguo = jieguo + t + " ";}}break;case" ":break;default:jieguo = jieguo + args[i] + " ";break;}}while (z.empty() == false) {jieguo = jieguo + z.pop() + " ";}String [] str = jieguo.split(" ");Count py = new Count(str);int answer = py.answer;flag = A(answer);}public Translate() {}
}

生成分数

package CaculateSystem;import java.util.Random;public class CreatOpNum {Rational opNum = new Rational();Random random = new Random();String opnumFile = "";String opnumPri = "";int flag;CreatOpNum(int flag1) {flag = flag1;int a = random.nextInt(9)+1;opNum.setNumerator(a);if (flag1 == 1) {//是分数int b = random.nextInt(9)+1;while (b == 0) {b = random.nextInt(9)+1;}opNum.setDenominator(b);} else {//不是分数opNum.setDenominator(1);}}public void getOpNumFile() {opnumFile = opNum.getNumerator() + " / " + opNum.getDenominator();}public void getOpNumPri() {if (flag == 0) {opnumPri = opNum.getNumerator() + "";//输出整数} else if (opNum.getNumerator() > opNum.getDenominator()) {//假分数int n = opNum.getNumerator() / opNum.getDenominator();int m = opNum.getNumerator() % opNum.getDenominator();opnumPri = n + " +  " + m + " / " + opNum.getDenominator();} else {opnumPri = opNum.getNumerator() + " / " + opNum.getDenominator();}}
}

带分数的计算

package CaculateSystem;
public class Rational {//有理数int numerator = 1;//分子int denominator = 1;//分母void setNumerator(int a) {//设置分子int c = f(Math.abs(a), denominator);//计算最大公约数numerator = a / c;denominator = denominator / c;if (numerator < 0 && denominator < 0) {numerator = -numerator;denominator = -denominator;}}void setDenominator(int b) {//设置分母int c = f(numerator, Math.abs(b));//计算最大公约数numerator = numerator / c;denominator = b / c;if (numerator < 0 && denominator < 0) {numerator = -numerator;denominator = -denominator;} else if (numerator > 0 && denominator < 0) {numerator = -numerator;denominator = -denominator;}}int getNumerator() {return numerator;}int getDenominator() {return denominator;}int f(int a, int b) {//求a,b的最大公约数if (a == 0) {return 1;//c为分母不能为0}if (a < b) {//令a>bint c = a;a = b;b = c;}int r = a % b;while (r != 0) {a = b;b = r;r = a % b;}return b;}Rational add(Rational r) {//加法运算int a = r.getNumerator();//返回有理数r的分子int b = r.getDenominator();//返回有理数r的分母int newNumerator = numerator * b + denominator * a;//计算出新分子int newDenominator = denominator * b;//计算出新分母Rational result = new Rational();result.setNumerator(newNumerator);result.setDenominator(newDenominator);return result;}Rational sub(Rational r) {//减法运算int a = r.getNumerator();int b = r.getDenominator();int newNumerator = numerator * b - denominator * a;int newDenominator = denominator * b;Rational result = new Rational();result.setNumerator(newNumerator);result.setDenominator(newDenominator);return result;}Rational muti(Rational r) {//乘法运算int a = r.getNumerator();int b = r.getDenominator();int newNumerator = numerator * a;int newDenominator = denominator * b;Rational result = new Rational();result.setNumerator(newNumerator);result.setDenominator(newDenominator);return result;}Rational div(Rational r) {//除法运算int a = r.getNumerator();int b = r.getDenominator();Rational result = new Rational();if (a == 0) {System.out.println("分母/除数不能为0");result.setNumerator(0);System.exit(0);} else {int newNumerator = numerator * b;int newDenominator = denominator * a;result.setNumerator(newNumerator);result.setDenominator(newDenominator);}return result;}
}

测试方法

运行过程截图

代码托管地址

代码托管

对结对的小伙伴做出评价(重点指出需要改进的地方)

本周我的小伙伴还是一如既往的给力,大部分的任务还是在他帮助下完成的,对我不懂的地方也认真给我解答,对我的帮助很大。

总结

本周完成了括号和分数的任务,结对真的比一个人有用,而且1+1>2是真的可以实现,虽然有的任务我们还没有完成,但是我们还会继续努力的。

PSP

计划 预估耗时(分钟) 实际耗时(分钟)
估计这个任务需要多少时间 200 200
开发
需求分析 (包括学习新技术) 120 150
生成设计文档 30 30
设计复审 (和同事审核设计文档) 60 75
代码规范 (为目前的开发制定合适的规范) 90 105
具体设计 30 60
具体编码 720 810
代码复审 60 60
测试(自我测试,修改代码,提交修改) 90 90
报告
测试报告 20 20
计算工作量 10 10
事后总结, 并提出过程改进计划 240 270
合计 1500 1710

参考引用

http://www.cnblogs.com/math/p/se-tools-001.html
http://www.cnblogs.com/vertextao/p/6593339.html
http://www.cnblogs.com/Vivian517/p/8762830.html
https://blog.csdn.net/newgrammer/article/details/757522
https://en.wikipedia.org/wiki/Polish_notation

转载于:https://www.cnblogs.com/zhangdeshuai/p/10706857.html

《java程序设计》结对编程-四则运算整体总结相关推荐

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

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

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

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

  3. postfixcalc函数 java_结对编程--四则运算(Java)萧英杰 夏浚杰

    结对编程--四则运算(Java)萧英杰 夏浚杰 功能要求 题目:实现一个自动生成小学四则运算题目的命令行程序 使用 -n 参数控制生成题目的个数(实现) 使用 -r 参数控制题目中数值(自然数.真分数 ...

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

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

  5. 结对编程-四则运算生成

    结对编程-四则运算生成 java实现四则运算程序 github传送门:https://github.com/JJYdesu/operation 成员:赖展飞 江家懿 一.项目要求 实现一个自动生成小学 ...

  6. 20162303 结对编程-四则运算(挑战出题)

    结对编程-四则运算(挑战出题) 结对伙伴:20162307 张韵琪 需求分析 1.建立一个新的代码仓库用于储存代码 2.随机生成指定运算符个数.指定个数和指定存储路径的表达式,包括括号 3.根据要求进 ...

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

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

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

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

  9. 结对编程——四则运算过程

    一.问题描述: 某公司程序员二柱的小孩上了小学二年级,老师让家长每天出100道(100以内)四则运算题目给小学生做. 二.结对对象:杨思思 博客地址:http://www.cnblogs.com/ci ...

最新文章

  1. NVIDIA Turing Architecture架构设计(下)
  2. Go gin使用html模板
  3. presto安装及可视化webui安装、配置
  4. 哈佛博士后入职街道办引关注,官方最新回应
  5. 软件开发除了23种设计模式,还有7个开发原则需要了解
  6. 天律的云端大数据分析挖掘之旅
  7. 解决方案,org.hibernate.LazyInitializationException: could not initialize proxy - no Session
  8. 第 6 章 存储 - 039 - Data Volume 之 bind mount
  9. 怎样做好一个项目经理
  10. 伺服驱动器cn1引脚定义_伺服驱动器CN1引脚定义,和面板操作设置,跪求高手指点。...
  11. 小米手机怎么删除桌面计算机,手机桌面图标怎么删除,小米手机怎样删除桌面图标-...
  12. 优动漫PAINT的界面如何适配数位屏/平板?
  13. 华硕的电脑装linux系统安装教程,华硕笔记本电脑一键重装系统详细教程
  14. phpstorm正则匹配清理被蠕虫病毒污染的html文件DropFileName = “svchost.exe” Ramnit
  15. 垃圾分类回收APP开发解决方案
  16. 517coding网站P1960
  17. 生成PDF文件方案--学习中
  18. RCP Editor 常见错误处理方法
  19. 51 AVR 编程器USBASP下载器驱动安装及程序下载
  20. 什么是网格?网格是什么

热门文章

  1. 帝国cms怎么搭建python环境_Python 库/模块的pip安装和IPython的使用
  2. html真实雾效果图,HTML5 Canvas图片上云雾弥漫驱散特效
  3. java 代码里设置环境变量_如何在一个java程序里设置环境变量
  4. virtual box linux 安装增强功能,Linux 开发环境中为VirtualBox安装增强功能
  5. promise allrace
  6. promise catchfinally
  7. transformers task_summary
  8. 03 unix 设计哲学和流重定向
  9. 09 动态数组和数据
  10. C语言整数的取值范围