20172303 2017-2018-2 《程序设计与数据结构》第8周学习总结
20172303 2017-2018-2 《程序设计与数据结构》第8周学习总结
教材学习内容总结
1.多态性
- 多态性引用可以在不同时间指向不同类型对象,即运行一致性的方法出现不一致的行为。
- 后绑定:
- 绑定:程序执行时被要求调用某个方法才可执行某段代码,叫做绑定。
- 在多态引用中,这种绑定在程序运行之后才能执行,所以称为后绑定或动态绑定。
- 后绑定的效率较低,因为它要绑定的方法定义取决于当时所引用的对象,但是后绑定的灵活性弥补了它效率低的缺陷。
- 建立多态性引用的方法有两种:继承方式和接口方式。
- 继承方式
- 格式:其中Animal类的一些子类中都有都有move方法
Animal creature = new Animal();
creature.move()
- 接口方式
- 格式:其中Mover是一个接口
//建立接口
public interface Mover
{
public void move();
}
//实现接口引用时
Mover creature;
creature = new Horse();
creature.move();
2.排序
- 选择排序
- 例:5 4 6 7 15 0 2 1
- 0 4 6 7 15 5 2 1(1)
- 0 1 6 7 15 5 2 7(2)
- 0 1 2 7 15 5 6 4(3)
- 0 1 2 4 15 5 6 7(4)
- 0 1 2 4 5 15 6 7(5)
- …
- 0 1 2 4 5 6 7 15
- 例:5 4 6 7 15 0 2 1
- 插入排序
- 例:5 4 6 7 15 0 2 1
- 4 5 6 7 15 0 2 1(1)
- 4 5 6 7 15 0 2 1(2)
- 4 5 6 7 15 0 2 1(3)
- 0 4 5 6 7 15 2 1(4)
- 0 1 4 5 6 7 15 1(5)
- …
- 0 1 2 4 5 6 7 15
- 例:5 4 6 7 15 0 2 1
- 排序算法的比较
- 选择排序和插入排序实质上具有相同的效率,但选择排序交换的次数更少,因此优于插入排序。
3.搜索
- 被搜索的一组元素称为搜索池。
- 线性搜索:从起点开始逐步搜索,将目标元素与每个元素依次比较直至找到目标或搜索到终点后发现找不到目标元素。
- 二分搜索:当数组是有序的时,可以采用不断寻找中间值的方法来找到目标元素。(当搜索元素个数为偶数时,中间值计算将忽略小数部分)
教材学习中的问题和解决过程
- 问题1:看书的时候不是很理解排序算法的效率究竟是怎么来的,n^2还好理解,但是n㏒₂n是怎么得出的就不是很清楚了
- 问题1解决方案:上网查了一下排序算法有八种,其中对于如何得到n㏒₂n的,堆排序解释的比较清楚,但是堆排序的定义博客里解释了很久直接粘贴过来太占用篇幅,所以仅把地址放过来,这里只放如何计算效率的解释:
- 除此之外,还有一种桶排序(定义:将阵列分到有限数量的桶子里。每个桶子再个别排序,但有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)提供了比n㏒₂n效率更高的方法:假设有n个数字,有m个桶,如果数字是平均分布的,则每个桶里面平均有n/m个数字。如果对每个桶中的数字采用快速排序,那么整个算法的复杂度是 O(n + m * n/m*log(n/m)) = O(n + nlogn - nlogm)从上式看出,当m接近n的时候,桶排序复杂度接近O(n)
代码调试中的问题和解决过程
- 问题1:做PP10.5时movies提示错误
- 问题1解决方案:使用
Alt+Enter
找不到解决方法,于是询问了结对的张昊然同学,发现直接引用以前的DVD类是不行的,还需要加一个compareto方法。
代码托管
上周考试错题总结(正确为绿色,错误为红色)
- 错题1:Which of the following is true regarding Java classes?
- A . All classes must have 1 parent but may have any number of children (derived or extended) classes
- B . All classes must have 1 child (derived or extended) class but may have any number of parent classes
- C . All classes must have 1 parent class and may have a single child (derived or extended) class
- D . All classes can have any number (0 or more) of parent classes and any number of children (derived or extended) classes
- E . All classes can have either 0 or 1 parent class and any number of children (derived or extended) classes
- 原因及理解情况:java中默认Object类的父类是本身。
- 错题2:You may use the super reserved word to access a parent class'private members.
- A . true
- B . false
- 原因及理解情况:概念不清,正好搞混了,super引用唯一不能引用的就是private变量。
- 错题3:In order to determine the type that a polymorphic variable refers to, the decision is made
- A . by the programmer at the time the program is written
- B . by the compiler at compile time
- C . by the operating system when the program is loaded into memory
- D . by the Java run-time environment at run time
- E . by the user at run time
- 原因及理解情况:当时还没有学到多态性,现在明白了,多态性是后绑定的,而后绑定取决于当时所引用的对象
结对及互评
点评模板:
- 博客中值得学习的或问题:
- 优点:教材学习总结有改进,从参考资料的变化也能看出开始下功夫往深想了
- 问题:在提醒之前错题放的是错的,应该总结的是第九章错题,他放的第十章
- 代码中值得学习的或问题:
- 优点:本周代码的优点不是很明显...
- 问题:在引用DVD类和DVDCollection类时其实可以使用import,要比直接复制过来简单许多
点评过的同学博客和代码
- 本周结对学习情况
- 20172322
- 结对学习内容
- 解决了PP10.5遇到的问题。
其他(感悟、思考等,可选)
- 感觉这周的内容是学java以来学的时候感觉最简单的了,书上的内容都能理解,看例题也能很快的理解,就当是一次短暂的小休息吧。
虽然被四则运算搞得头昏脑涨 - 教材复习情况
- 复习进度(页数):0/341
- 很可惜,由于这部分把时间大量花在了四则运算上,没有进行教材复习...
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 120/120 | 1/1 | 9/9 | |
第二周 | 246/366 | 1/2 | 9/18 | |
第三周 | 785/1121 | 2/4 | 15/33 | |
第四周 | 615/1736 | 1/5 | 20/53 | |
第五周 | 1409/2645 | 1/6 | 24/77 | |
第六周 | 561/3206 | 1/7 | 20/97 | 再次搞清了一些自己有点含糊不清的概念 |
第七周 | 63/3269 | 1/8 | 15/112 | |
第8周 | 2476/5745 | 3/11 | 90/201 |
- 计划学习时间:30小时
- 实际学习时间:90小时
- 改进情况:其实本周大部分时间都在项目开发上,教材学习占得比例不是很大