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

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

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

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);
>      }//一个方法,让num一、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语句、数组等。而且在解决问题的过程当中,会发现一些问题,通过思考后会出现多种思路,这既拓展了咱们的思路,还须要咱们取思考来选择一个更简便、更通俗易懂的方法。其次,这个项目出来的时候,仍是出现了一些与实际不符的问题,好比原先的操做数范围咱们设置了为1~99,分数最大可以为98/99.后来算式出来的时候发如今实际生活中根本不可能出现这么大的数字来叫咱们运算。那么好玩的又出现了,既然操做数不须要太大,咱们能够设置为1~9,那么在中缀转后缀的时候咱们就没必要先判断是否为操做符了(由于ASCII码中没有两位数的操做数,所以只能先判断是否为操做符)。
    ·······

7.对好友的评价:

  • 队友很勤快,也很努力。在上周变成的过程当中,由于我的缘由,99%的代码都是她编的,这周她比较忙,因此我就比她多编了一点。在整个过程当中,咱们颇有默契的作到了谁有空就谁多作一点,我认为这样是很好的。最重要的是:在最后咱们完成了所要求的代码编程。我的感受队友在整个项目设计、编程中的做用是大于个人,所以给出如下评分:
  • 好友评分:
    - 20172309:40
    - 20172310:60
相关文章
相关标签/搜索