• 2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算_第二周


    2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算

    组队成员: 仇夏
    学号: 20172310
    结对照片:
    博客地址:点击这里

    1.进度回顾:

    • 已完成:
      - 完成了生成中缀表达式的类。
      - 完成了main函数用来运行的类。
    • 待完成:
      - 中缀表达式转化成后缀表达式的类
      - 后缀表达式的计算。
      - 去重。
      - 将生成的题目存到一个文件中。
      - 代码的完善与美化。

    2.项目介绍:

    • 这个程序要求用户输入所要生成问题的个数n(每个算式的等级都是随机的且最高级为5级),之后每出来一个问题就要求用户输入他计算的得到的答案。程序将自动计算出正确答案,并与用户答案相比较,最后所有问题计算完后,电脑自动显示所有正确答案与用户答案,并给出正确率。

    3.项目代码链接:

    4.关键代码及解释:

    • 关于生成分数
    >      public class Fraction {
    >      private int a,b;
    >      private int num1;
    >      private int num2;
    >      private String result;
    >      private int tem=1;//两数最大公约数
    >
    >
    >      public Fraction( )
    >     {
    >       getRandom();
    >        while (num1==num2) {//当分子分母相同就一直使用getRandom()方法获得num1,num2直到num1!=num2。
    >            getRandom();
    >        }
    >            a=Math.min(num1,num2);
    >            b=Math.max(num1,num2);//让a,b分别取较小值和较大值
    >
    >            tem=a;
    >
    >            while (tem>=1)
    >            {
    >                if (num1%tem==0&&num2%tem==0)
    >                    break;
    >
    >                tem--;
    >            }//得到最大公约数
    >
    >          a=a/tem;
    >           b=b/tem;
    >            result=a+"/"+b;//得到约分后的分数
    >
    >        }
    >
    >     private void getRandom(){
    >        num1 = (int)(Math.random()*9+1);
    >        num2 = (int)(Math.random()*9+1);
    >      }//一个方法,让num1、num2分别取1~9中的随机数
    >
    >      public String getResult()
    >      {
    >        return result;
    >          }
    >      }
    
    • 中缀表达式转化成后缀表达式:个人觉得有两个难点:
    1. 关于建立一个坐标,用以比较+、-、×、÷的比较级:1表示大于,-1表示小于

    2. 怎么将坐标系与操作符连立起来:
    • 关于后缀表达式的计算:
      这一步就是将后缀表达式中的操作数入栈,并化成RationalNumber类型,并遇到操作符就使用相对应的方法将该操作符前的两个操作数进行计算。

    5.遇到的问题及解释:

    • 问题1:如何把用户输入的答案与正确答案存起来,在最后统一输出以便好比较?
    • 问题1解决方法:对这一部分我是构建三个数组。以第一个用以存入用户答案,第二个用以存入正确答案,第三个存入对错情况。如图:
    • 问题2:为什么正确率始终为零?
    • 问题2解决方法:出现这个问题的原因是:
       int count1=0,count;
       double accuracy;
       accuracy=count1/count;//更改以前
       accuracy=(double)count1/count;//更改以后
    
    • 问题3:如何用代码实现在比较操作符优先级的时候与栈顶元素比较,直到遇到比他低的元素
    • 暂未解决!
    • 问题4:在生成分数的分子与分母的时候,如果出现分子分母相等,如何实现重新定义分子分母但不影响后面程序的运行呢?
    • 问题4解决方法:可以使用一个循环语句,当分子分母相等时重新给分子分母取值,直到分子分母不等。

    6.项目自评:

    • 这个项目的后期还是挺有意思的,编出来了就很高兴。但往往后续会发现会出现一些Bug,所以就要运用到以前的知识去解决它,在这个过程中,往往能够复习到已经忘掉的东西。比如:switch语句、数组等。并且在解决问题的过程中,会发现一些问题,经过思考后会出现多种思路,这既拓展了我们的思路,还需要我们取思考来选择一个更简便、更通俗易懂的方法。其次,这个项目出来的时候,还是出现了一些与实际不符的问题,比如原先的操作数范围我们设置了为199,分数最大能够为98/99.后来算式出来的时候发现在实际生活中根本不可能出现这么大的数字来叫我们运算。那么好玩的又出现了,既然操作数不需要太大,我们可以设置为19,那么在中缀转后缀的时候我们就不必先判断是否为操作符了(因为ASCII码中没有两位数的操作数,因此只能先判断是否为操作符)。
      ·······

    7.对好友的评价:

    • 队友很勤快,也很努力。在上周变成的过程中,因为个人原因,99%的代码都是她编的,这周她比较忙,所以我就比她多编了一点。在整个过程中,我们很有默契的做到了谁有空就谁多做一点,我认为这样是很好的。最重要的是:在最后我们完成了所要求的代码编程。个人感觉队友在整个项目设计、编程中的作用是大于我的,因此给出以下评分:
    • 好友评分:
      - 20172309:40
      - 20172310:60
  • 相关阅读:
    Vue脚手架runtime-only中render函数的参数为什么是h?
    Vue中的 key 属性
    TypeScript安装以及使用
    Vue浏览器调试工具VueTools安装以及使用
    VueRouter路由跳转报错:vue-router.esm.js?fe87:2100 Uncaught (in promise) NavigationDuplicated
    VSCode使用webpack指令,因为在此系统上禁止运行脚本。
    尤雨溪在 vue3.0 beta 上推荐的 no webpack 小工具 vite
    celery task异步任务
    Notepad++使用
    Django基础013--redis开发
  • 原文地址:https://www.cnblogs.com/dky-wzw/p/9011054.html
Copyright © 2020-2023  润新知