《java程序设计》结对编程-四则运算整体总结
需求分析(描述自己对需求的理解,以及后续扩展的可能性)
实现一个命令行程序,要求:
- 自动生成小学四则运算题目(加,减,乘,除)
- 支持整数
- 支持多运算符(比如生成包含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程序设计》结对编程-四则运算整体总结相关推荐
- java 四则运算gui_结对编程-四则运算GUI的实现
一.项目成员以及coding地址: 二.结对编程题目描述 在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI,成为一个有基本功能.一定价值的程序.在下面的 ...
- 张天钰 内大计算机学院,20175305张天钰Java结对编程四则运算
Java结对编程四则运算 一.题目描述:如何对表达式进行求值运算呢 1.中缀表达式与后缀表达式(娄老师讲解) 中缀表达式就是运算符号在运算数中间的表达式,比如1+2,顾名思义,后缀表达式就是运算符在运 ...
- postfixcalc函数 java_结对编程--四则运算(Java)萧英杰 夏浚杰
结对编程--四则运算(Java)萧英杰 夏浚杰 功能要求 题目:实现一个自动生成小学四则运算题目的命令行程序 使用 -n 参数控制生成题目的个数(实现) 使用 -r 参数控制题目中数值(自然数.真分数 ...
- 结对编程--------四则运算 实验总结2
结对编程----------四则运算 实验总结2 结对对象 20172301 郭恺 20172328 李馨雨 过程截图 这个是我们编写的main,叫ArithmeticTest1主要用于生成随机等级的 ...
- 结对编程-四则运算生成
结对编程-四则运算生成 java实现四则运算程序 github传送门:https://github.com/JJYdesu/operation 成员:赖展飞 江家懿 一.项目要求 实现一个自动生成小学 ...
- 20162303 结对编程-四则运算(挑战出题)
结对编程-四则运算(挑战出题) 结对伙伴:20162307 张韵琪 需求分析 1.建立一个新的代码仓库用于储存代码 2.随机生成指定运算符个数.指定个数和指定存储路径的表达式,包括括号 3.根据要求进 ...
- 20172304 结对编程--四则运算实验总结
20172304 结对编程--四则运算 结对对象 20172301 郭恺 20172328 李馨雨 需求分析 以结对小组形式编写代码,实现以下功能: 1.自动生成题目 可独立使用(能实现自己编写测试类 ...
- 20172316 结对编程-四则运算 第一周 阶段总结
20172316 结对编程-四则运算 第一周 阶段总结 1.项目内容 以结对小组形式编写代码,实现以下功能: 1.自动生成题目 可独立使用(能实现自己编写测试类单独生成题目的功能) 可生成不同等级题目 ...
- 结对编程——四则运算过程
一.问题描述: 某公司程序员二柱的小孩上了小学二年级,老师让家长每天出100道(100以内)四则运算题目给小学生做. 二.结对对象:杨思思 博客地址:http://www.cnblogs.com/ci ...
最新文章
- NVIDIA Turing Architecture架构设计(下)
- Go gin使用html模板
- presto安装及可视化webui安装、配置
- 哈佛博士后入职街道办引关注,官方最新回应
- 软件开发除了23种设计模式,还有7个开发原则需要了解
- 天律的云端大数据分析挖掘之旅
- 解决方案,org.hibernate.LazyInitializationException: could not initialize proxy - no Session
- 第 6 章 存储 - 039 - Data Volume 之 bind mount
- 怎样做好一个项目经理
- 伺服驱动器cn1引脚定义_伺服驱动器CN1引脚定义,和面板操作设置,跪求高手指点。...
- 小米手机怎么删除桌面计算机,手机桌面图标怎么删除,小米手机怎样删除桌面图标-...
- 优动漫PAINT的界面如何适配数位屏/平板?
- 华硕的电脑装linux系统安装教程,华硕笔记本电脑一键重装系统详细教程
- phpstorm正则匹配清理被蠕虫病毒污染的html文件DropFileName = “svchost.exe” Ramnit
- 垃圾分类回收APP开发解决方案
- 517coding网站P1960
- 生成PDF文件方案--学习中
- RCP Editor 常见错误处理方法
- 51 AVR 编程器USBASP下载器驱动安装及程序下载
- 什么是网格?网格是什么
热门文章
- 帝国cms怎么搭建python环境_Python 库/模块的pip安装和IPython的使用
- html真实雾效果图,HTML5 Canvas图片上云雾弥漫驱散特效
- java 代码里设置环境变量_如何在一个java程序里设置环境变量
- virtual box linux 安装增强功能,Linux 开发环境中为VirtualBox安装增强功能
- promise allrace
- promise catchfinally
- transformers task_summary
- 03 unix 设计哲学和流重定向
- 09 动态数组和数据
- C语言整数的取值范围