结对编程-四则运算 整体总结

  • 学习笔记

  • 中缀表达式转换为后缀表达式

    • 如果遇到数字,我们就直接将其输出。
    • 如果遇到非数字时,若栈为空或者该符号为左括号或者栈顶元素为括号,直接入栈。
    • 如果遇到一个右括号,持续出栈并输出符号,直到栈顶元素为左括号,然后将左括号出栈(注意,左括号只出栈,不输出),右括号不入栈。
    • 如果遇到运算符号且栈非空,查看栈顶元素,如果栈顶元素的运算优先级大于或者等于该运算符号,则持续出栈,直到栈顶元素优先级小于该运算符。最后将该元素入栈。
    • 如果我们读到了输入的末尾,则将栈中所有元素依次弹出。
  • 生成随机数的运用

    • 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 第二周结队编程-四则运算相关推荐

  1. 第八周结对编程四则运算二

    需求分析 能生成简单四则运算题目并判断用户回答对错. 能正确统计回答正确的概率. 能正确的处理有括号的情况并输出正确的运算结果. 能正确输出有负数的情况. 结果截图 whitestar运行图 码云链接 ...

  2. 吴恩达deeplearning.ai系列课程笔记+编程作业(11)第四课 卷积神经网络-第二周 深度卷积网络:实例探究(Deep convolutional models: case studies)

    第四门课 卷积神经网络(Convolutional Neural Networks) 第二周 深度卷积网络:实例探究(Deep convolutional models: case studies) ...

  3. 吴恩达deeplearning.ai系列课程笔记+编程作业(6)第二课 改善深层神经网络-第二周:优化算法 (Optimization algorithms)

    第二门课 改善深层神经网络:超参数调试.正则化以及优化(Improving Deep Neural Networks:Hyperparameter tuning, Regularization and ...

  4. 浙大翁恺pat练习题_中国大学MOOC-翁恺-C语言-PAT习题及解答-第二周

    中国大学MOOC-翁恺-C语言-PAT习题及解答-第二周 02-0. 整数四则运算 输入格式:输入在一行中给出2个正整数A和B. 输出格式:在4行中按照格式"A 运算符 B = 结果&quo ...

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

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

  6. 20165101刘天野 2017-2018-2 《Java程序设计》 结对编程练习_四则运算(第二周)

    20165101刘天野 2017-2018-2 <Java程序设计> 结对编程练习_四则运算(第二周) 一.需求分析 能随机生成n道四则运算题目,n由使用者输入 支持分数运算 支持多运算符 ...

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

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

  8. java 编程联系_《JAVA程序设计》结对编程联系_四则运算(第二周:整体性总结)...

    #结对对象与其博客链接 20175312陶光远:https://www.cnblogs.com/20175312-tgy/p/10697238.html #需求分析 (一)功能需求 1.自动生成题目( ...

  9. 20172302『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结

    一.结对对象 姓名:周亚杰 学号:20172302 担任角色:驾驶员(周亚杰) 伙伴第二周博客地址 二.本周内容 (一)继续编写上周未完成代码 1.本周继续编写代码,使代码支持分数类计算 2.相关过程 ...

最新文章

  1. C语言的变量的内存分配
  2. Google X垃圾分类机器人横空出世,再也不怕分不清干垃圾湿垃圾有害垃圾了
  3. 15个超实用的php正则表达式
  4. 带你刷burpsuite官方网络安全学院靶场(练兵场)之客户端漏洞——跨站请求伪造(CSRF)专题
  5. Mybatis-入门篇-根据官方文档搭建
  6. SQL Server 负载均衡方案集锦
  7. web前端开发---弃Hbuilder编辑器到Atom插件推荐,快捷键,快速编辑html 使用
  8. 图像处理-空间域平滑滤波
  9. 推荐系统算法工程师培养计划
  10. OpenGL常见函数功能查询
  11. vue2.0+echarts可视化图形开发中遇到的问题总结
  12. 古老的txt下传和txt上载
  13. Maintenance Plans(维护计划)详解【转】
  14. u-boot 设置mac 地址
  15. 集成学习-Stacking与Blending与泰坦尼克号特征工程(DataWhale第二期)
  16. 没有寻线仪怎么找网线_乱七八糟的网线怎么找?寻线仪来帮你
  17. java jstl 配置_jstl的tld配置
  18. 2022款Thinkphp家政上门预约系统-全开源系统源码
  19. 笔记:新一代高效视频编码H.265/HEVC原理、标准与实现
  20. 评分卡模型(二)基于评分卡模型的用户付费预测

热门文章

  1. Asp.net Ajax,Jquery,ExtJs 三种Ajax技术框架比较
  2. AxureRP9不同Page使用同一个Master,触发不同事件。
  3. Dollar toolbox 学习笔记(一)
  4. Minimum Mean Squared Error (MMSE)最小均方误差
  5. 变分法理解2——基本方法
  6. JDBC简单连接MySQL
  7. IntelliJ IDEA常用快捷键——基于Eclipse
  8. Linux学习笔记4
  9. Javascript基于对象三大特征
  10. 【读书笔记0101】Beginning linux programming-3rd