20172301 2017-2018-2 《程序设计与数据结构》第5周课堂测试修改报告

20172301 2017-2018-2 《程序设计与数据结构》课堂测试修改报告

课程:《程序设计与数据结构》
班级: 1723
姓名: 郭恺
学号: 20172301
实验教师:王志强老师
测试日期:2018年4月11日
必修/选修: 必修

测试内容

书P241 PP7.4

修改 RatioanlNumber 类,使其实现Comparable接口。为了实现比较, 首先计算两个RationalNumber对象(分子和分母)的浮点数等价值,然后以0.0001为误差精度进行比较。编写一个main驱动方法,测试你的修改结果。

  • 首先,修改RationalNumber类, 实现 Comparable接口。
  • 然后以0.0001为误差精度进行比较。
  • 编写main驱动方法进行测试。

测试过程及结果

设计思路:我们要想实现Comparable接口,必须要进行compareTo方法的编写。而根据浮点数比较的原则,我们需要定义一个误差精度0.0001。

  1. 实现接口Comparable
    根据题目,首先我们需要实现接口:

  2. 编写compareTo方法

    • 第一步,因为compareTo对象是obj,所以首先我们需要进行类型转换,把其变为RationalNumber类型。

    • 第二步,因为我们比较的是两个分数,所以求差我们就可以调用RationalNumber类中的subtract方法,把两个分数进行相减

    • 第三步,因为我们相减得出的是分数,如何和0.0001比较,就需要把分数转换为小数。我们可以通过调用RationalNumber类中的getNumerator()和getDenominator()方法相除得出结果。

      • 这里要注意的是,getNumerator()和getDenominator()方法都是int型的,而我们最后需要得出的结果是double型的,所以我们需要进行数据强制转换
    • 第四步,我们需要把结果取绝对值

      • 书P145:

      判断两个浮点数相等的一个较好的方法是:计算两个数差的 绝对值并将差和 某个误差标准相比较。

      • 这里调用Math.abs()
    • 第五步,结果和0.0001进行比较

      • 比较就需要我们用到条件语句if。
      • 我们会有两种结果:
      if (a<0.0001 && a >= 0)
           return 0;    // 等于
         else
           return -1;   // 不等于
      

      那么这样compareTo就编写完成了。截图:

  3. 编写main驱动方法,测试 :

  4. 结果:

测试过程中遇到的问题和解决过程

  • 问题1:重写了compareTo方法,没有实现接口,程序依然能够运行,没有提示错误。

  • 问题1解决方案: 实现接口,必须要重写compareTo 方法;但是重写方法,不一定要实现接口。 所以,我就忘记实现接口。尽管,接口似乎没有作用是我理解不了,但是我们应该养成习惯。实现接口,重写方法。

  • 问题2:浮点数比较。

  • 问题2解决方案:浮点数比较,是比较其是否相等,而不是比较他们的大小。不然直接相减不就好了。我这道题在题意理解上就存在问题,这与程序编写错误有很大关系。
    我们在编写程序,首先要明确我们需要完成什么,要让程序执行什么错误,不要一上来就弄错了方向。合适确定软件的需求,有一个好的开端,实际上就是成功了一半。

代码链接

其他(感悟、思考等)

   实际上,这次程序的编写并不完美。首先,我在开始的时候就犯下了错误,没有明确程序需要执行的任务,导致方法编写错误,main驱动方法编写错误。然后,虽然重写了compareTo方法,却没有实现接口,也是没有理解题意的缘故。所以,这次之后,我认为给我印象最深刻的就应该是细心。 同时,这是老师布置的作业,一方面,我对自己的程序理解不清,另一方面,是对教材的掌握不过全面。希望自己可以谨记这次教训,再接再厉

参考资料

posted @ 2018-04-11 20:19  奈何明月ઇଓ  阅读(282)  评论(5编辑  收藏  举报
页尾