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。
-
实现接口Comparable
根据题目,首先我们需要实现接口:
-
编写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就编写完成了。截图:
-
-
编写main驱动方法,测试 :
-
结果:
测试过程中遇到的问题和解决过程
-
问题1:重写了compareTo方法,没有实现接口,程序依然能够运行,没有提示错误。
-
问题1解决方案: 实现接口,必须要重写compareTo 方法;但是重写方法,不一定要实现接口。 所以,我就忘记实现接口。尽管,接口似乎没有作用
是我理解不了,但是我们应该养成习惯。实现接口,重写方法。 -
问题2:浮点数比较。
-
问题2解决方案:浮点数比较,是比较其是否相等,而不是比较他们的大小。不然直接相减不就好了。我这道题在题意理解上就存在问题,这与程序编写错误有很大关系。
我们在编写程序,首先要明确我们需要完成什么,要让程序执行什么错误,不要一上来就弄错了方向。合适确定软件的需求,有一个好的开端,实际上就是成功了一半。
代码链接
其他(感悟、思考等)
实际上,这次程序的编写并不完美。首先,我在开始的时候就犯下了错误,没有明确程序需要执行的任务,导致方法编写错误,main驱动方法编写错误。然后,虽然重写了compareTo方法,却没有实现接口,也是没有理解题意的缘故。所以,这次之后,我认为给我印象最深刻的就应该是细心。 同时,这是老师布置的作业,一方面,我对自己的程序理解不清,另一方面,是对教材的掌握不过全面。希望自己可以谨记这次教训,再接再厉。