20165322 第二周结队编程-四则运算
结对编程-四则运算 整体总结
学习笔记
中缀表达式转换为后缀表达式
- 如果遇到数字,我们就直接将其输出。
- 如果遇到非数字时,若栈为空或者该符号为左括号或者栈顶元素为括号,直接入栈。
- 如果遇到一个右括号,持续出栈并输出符号,直到栈顶元素为左括号,然后将左括号出栈(注意,左括号只出栈,不输出),右括号不入栈。
- 如果遇到运算符号且栈非空,查看栈顶元素,如果栈顶元素的运算优先级大于或者等于该运算符号,则持续出栈,直到栈顶元素优先级小于该运算符。最后将该元素入栈。
- 如果我们读到了输入的末尾,则将栈中所有元素依次弹出。
生成随机数的运用
Random ran = new Random();
随机数方法创建对象int B = ran.nextInt(2);
生成0—1之内的随机数
需求分析
- 随机生成题目
- 生成题目数量根据用户需求输入
- 自动生成小学四则运算题目(加、减、乘、除)
- 支持整数和真分数
- 支持多运算符(比如生成包含100个运算符的题目)
- 统计正确率
能多次生成题目
- 扩展需求
- 题目去重
- 支持多语言
- 处理生成题目并输出到文件
- 完成题目后从文件读入并判题
- 随机生成题目
设计思路
- 实验首先是完成一个计算器的功能,可以实现简单的+、-、*、/运算
- 实现多运算符,编入四个类分别实现整数运算、真分数运算、判断结果正确并计算正确率
- 利用JUnit检测非法输入
- 设计一个主类生成随机数,生成题目,并判断正确率
- 设计测试类,利用JUnit测试整数类与分数类的四则运算
uml图:
实现真分数计算代码及注释
import java.util.Random;
public class Fraction {private int numerator, denominator; //定义分母、分子public Fraction (int numer, int denom){if(denom == 0 ) //分子为0denom = 1;if (denom < 0) //若分母小于0,则取分母为正值,分子为负值{numer = numer * -1;denom = denom * -1;}numerator = numer;denominator = denom;reduce();}public int getNumerator(){return numerator;}public int getDenominator(){return denominator;}public Fraction add(Fraction op2) //实现真分数加法运算{int commonDenominator = denominator * op2.getDenominator(); //两随机数a1、a2的分母相乘,进行通分int numerator1 = numerator * op2.getDenominator(); //a1的分子=a1的分子与a2的分母相乘int numerator2 = op2.getNumerator() * denominator; //a2的分子=a2的分子与a1的分母相乘int sum = numerator1 + numerator2; //将通分过后的两个随机数相加System.out.print("("+this.toString()+")" + " + " + "("+op2.toString()+")" + "=");return new Fraction (sum, commonDenominator);}public Fraction subtract(Fraction op2) //实现真分数减法运算{int commonDenominator = denominator * op2.getDenominator();int numerator1 = numerator * op2.getDenominator();int numerator2 = op2.getNumerator() * denominator;int difference = numerator1 - numerator2;System.out.print("("+this.toString()+")" + " - " + "("+op2.toString()+")" + "=");return new Fraction(difference,commonDenominator);}public Fraction multiply (Fraction op2) //实现真分数乘法运算{int numer = numerator * op2.getNumerator();int denom = denominator * op2.getDenominator();System.out.print("("+this.toString()+")" + " * " + "("+op2.toString()+")" + "=");return new Fraction (numer, denom);}public Fraction divide (Fraction op2) //实现真分数除法运算{int numer = numerator * op2.getDenominator();int denom = denominator * op2.getNumerator();System.out.print("("+this.toString()+")" + " / " + "("+op2.toString()+")" + "=");return new Fraction (numer, denom);}public String toString() //输出格式及限定{String result;if (numerator == 0) //分子为0,结果为0result = "0";elseif(denominator == 0) //分母不能为0return "错误!分母不能为0";elseif (denominator == 1) //分母为1,结果取分子值result = numerator + "";elseresult = numerator + "/" + denominator; //按分数形式输出结果return result;}private void reduce(){if (numerator != 0){int common = gcd (Math.abs(numerator), denominator); //取分子分母最大公因子numerator = numerator / common; //约分denominator = denominator / common;}}private int gcd (int num1, int num2) //计算最大公因子{if(num2==0)return num1;elsereturn gcd(num2,num1%num2);}public static Fraction obj(){ //生成随机数Random ran = new Random();return new Fraction(ran.nextInt(100),ran.nextInt(100));}
}
测试代码
运行结果截图
码云链接
码云链接
实验过程
- 上次关于真分数的算法我们没有弄明白。这次我们认真讨论并解决了问题。关于代码的批注在上面的代码里。
- 首先是用java语言描述真分数里的加减乘除运算,然后将运算结果化简。
- 化简过程需要用到求最大公因子,这时候我们需要分子分母均为正值,于是就有了
public Fraction (int numer, int denom)
方法,以及Math.abs(numerator)
来保证算法不出现漏洞。 - 除此之外还要注意分子分母计算的一些限定特性。我们同样加进代码里。
- 代码里的去重功能没写出来,但是经过讨论有了思路:(1)记录之前生成的题目;(2)用遍历比较新生成题目与旧生成题目。如果重复,则删除此新生成题,并再生成一个题目,重新遍历检查。如果不重复,则进入下一环节。
评价我的结队小伙伴
她很美
是天边的火烧云
是日月星辰
但是
我更美
在本周学习中,在小伙伴的帮助下,我对代码有了更深的解读,她的认真及更高效的学习方法让我受益,在这周的磨合中我们的默契度也有了更大的提高,思考问题的时候,会有更多相同的思考,结对学习的过程也是我们相互促进的过程。
总结
- 感受到了有所思路却写不出代码的痛苦,有时候甚至想,为啥不用C编...好吧我的思维还没有转变过来。
- 但是还是很开心,比上周又进步了一点点。开始学着用伪代码,流程图来描述思路给自己的小伙伴看。也让整个算法在脑海里有更清晰的构造。
转载于:https://www.cnblogs.com/wangyaojia/p/8910340.html
20165322 第二周结队编程-四则运算相关推荐
- 第八周结对编程四则运算二
需求分析 能生成简单四则运算题目并判断用户回答对错. 能正确统计回答正确的概率. 能正确的处理有括号的情况并输出正确的运算结果. 能正确输出有负数的情况. 结果截图 whitestar运行图 码云链接 ...
- 吴恩达deeplearning.ai系列课程笔记+编程作业(11)第四课 卷积神经网络-第二周 深度卷积网络:实例探究(Deep convolutional models: case studies)
第四门课 卷积神经网络(Convolutional Neural Networks) 第二周 深度卷积网络:实例探究(Deep convolutional models: case studies) ...
- 吴恩达deeplearning.ai系列课程笔记+编程作业(6)第二课 改善深层神经网络-第二周:优化算法 (Optimization algorithms)
第二门课 改善深层神经网络:超参数调试.正则化以及优化(Improving Deep Neural Networks:Hyperparameter tuning, Regularization and ...
- 浙大翁恺pat练习题_中国大学MOOC-翁恺-C语言-PAT习题及解答-第二周
中国大学MOOC-翁恺-C语言-PAT习题及解答-第二周 02-0. 整数四则运算 输入格式:输入在一行中给出2个正整数A和B. 输出格式:在4行中按照格式"A 运算符 B = 结果&quo ...
- 20172307 结对编程项目-四则运算 第二周 阶段总结
20172307 结对编程项目-四则运算 第二周 阶段总结 (结队项目码云地址) 相关过程截图(关键代码处加了注释) 编写出实现中缀转后缀的类Transform /*Transform.java 作者 ...
- 20165101刘天野 2017-2018-2 《Java程序设计》 结对编程练习_四则运算(第二周)
20165101刘天野 2017-2018-2 <Java程序设计> 结对编程练习_四则运算(第二周) 一.需求分析 能随机生成n道四则运算题目,n由使用者输入 支持分数运算 支持多运算符 ...
- java周志第二周_20165325 2017-2018-2 《Java程序设计》结对编程_第二周:四则运算
20165325 2017-2018-2 <Java程序设计>结对编程_第二周:四则运算 一.码云链接 1.Git提交日志已经实现一个功能/一个bug修复的注释说明,如图所示: 2.测试代 ...
- java 编程联系_《JAVA程序设计》结对编程联系_四则运算(第二周:整体性总结)...
#结对对象与其博客链接 20175312陶光远:https://www.cnblogs.com/20175312-tgy/p/10697238.html #需求分析 (一)功能需求 1.自动生成题目( ...
- 20172302『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结
一.结对对象 姓名:周亚杰 学号:20172302 担任角色:驾驶员(周亚杰) 伙伴第二周博客地址 二.本周内容 (一)继续编写上周未完成代码 1.本周继续编写代码,使代码支持分数类计算 2.相关过程 ...
最新文章
- C语言的变量的内存分配
- Google X垃圾分类机器人横空出世,再也不怕分不清干垃圾湿垃圾有害垃圾了
- 15个超实用的php正则表达式
- 带你刷burpsuite官方网络安全学院靶场(练兵场)之客户端漏洞——跨站请求伪造(CSRF)专题
- Mybatis-入门篇-根据官方文档搭建
- SQL Server 负载均衡方案集锦
- web前端开发---弃Hbuilder编辑器到Atom插件推荐,快捷键,快速编辑html 使用
- 图像处理-空间域平滑滤波
- 推荐系统算法工程师培养计划
- OpenGL常见函数功能查询
- vue2.0+echarts可视化图形开发中遇到的问题总结
- 古老的txt下传和txt上载
- Maintenance Plans(维护计划)详解【转】
- u-boot 设置mac 地址
- 集成学习-Stacking与Blending与泰坦尼克号特征工程(DataWhale第二期)
- 没有寻线仪怎么找网线_乱七八糟的网线怎么找?寻线仪来帮你
- java jstl 配置_jstl的tld配置
- 2022款Thinkphp家政上门预约系统-全开源系统源码
- 笔记:新一代高效视频编码H.265/HEVC原理、标准与实现
- 评分卡模型(二)基于评分卡模型的用户付费预测