20172313 2017-2018-2 《程序设计与数据结构》第八周学习总结

20172313 2017-2018-2 《程序设计与数据结构》第八周学习总结

教材学习内容总结

  1. 了解了在多态引用时的后绑定的概念。
  2. 学习练习如何利用继承方式来实现多态性。
  3. 学习练习如何利用接口来实现多态性。
  4. 初步学习算法,了解学习了两种对数组中的元素进行排序的方法。
  5. 了解学习了两种在一组元素中寻找一个指定的目标元素的方法。
  6. 初步学习判断何时使用多态性设计对问题进行解决,并体会利用多态性所带来的好处。

教材学习中的问题和解决过程

  • 问题1:在刚刚开始学习利用接口实现多态性的时候感觉很奇怪,因为在原来学习接口的时候的时候知道Java中的接口是一组常量和抽象方法的集合,接口不能被实例化。在看到树上的举例 Speak special() = new Philosopher();的时候感到很疑惑,不明白为什么接口可以被实例化。
  • 问题1解决方案:随着学习的深入后,了解到这里并不是对接口自己本身实例化,而是用于声明一个对象引用变量指向实现该接口的类的对象。
  • 问题2:在学习对一组元素进行排序的时候有这样一段代码
 public static void selectionSort(Comparable[] list) {
        int min;
        Comparable temp;
        
        for (int index = 0; index < list.length - 1; index++) {
            min = index;
            for (int scan = index + 1; scan < list.length; scan++)
                if (list[scan].compareTo(list[min]) < 0)
                    min = scan;
           
            // Swap the values
            temp = list[min];
            list[min] = list[index];
            list[index] = temp;
        }
    }
  • 这里的temp是一个Comparable类的对象,不明白为什么可以用list[min]对它进行赋值。
  • 问题2解决方案:对书本上的知识继续学习并结合蓝墨云上的视频学习后,这里的list数组是一个形式参数,而在传入的实际参数数组中保存的是一个个Contact对象,这里是利用了多态使得对象引用变量指向其他的对象。
  • 问题3:在开始学习二分搜索法的时候,看到书上给的示例,就想到如果待搜索的元素个数为偶数的话,就会有两个中点值,那么这个时候要怎么取中点?虽然书上后面也进行了解释,不是很理解书上想要表达的意思。
  • 问题3解决方案:王老师在上课的时候对该问题进行了解答,因为是取中点,所以对两个数取平均值在进行类型转换转换为int行,这时候小数部分就被忽略掉了,这也就是书上所说的取两个中点的第一个为新的中点。

代码调试中的问题和解决过程

  • 问题1:在做编程项目pp10.4的时候发现用两种方法进行排序得到的结果不一致。

  • 问题1解决方案:我检查了一遍算法的代码,因为是根据书上的例题进行改写的,所以我就把目光放到了测试代码上,经过仔细的检查后,发现在我进行第二次排序的时候传入的实际参数错了,对参数进行改正代码就可以成功运行了。

  • 问题2:在做编程项目pp10.5的时候运行代码的时候提示了Exception in thread "main" java.lang.NullPointerException

  • 问题2解决方案:一开始的时候我认为是由于我没有在Movies类中写排序的方法,我完成排序的操作是在测试时通过调用其他类的方法来完成的。我对代码进行了修改,可问题依旧没有得到解决。


  • 我实在是找不出有什么问题,只好求助于百度,找到了以下的解释。我开始按照这个思路来找我的问题所在,原来在书上的例题中有一段扩充数组容量的代码,由于数组初始化的大小是100,在进行排序的时候,数组并未全部储存元素,有一部分为空所以也就导致了我上面问题的发生,我对这一段代码修改成如下,问题得以解决。

代码托管

上周考试错题总结

  • 错题1: Inheritance through an extended (derived) class supports which of the following concepts?
    A . interfaces
    B . modulary
    C . information hiding
    D . code reuse
    E . correctness
  • 解析 通过扩展一个类并继承它,新类不必重新实现任何这些继承的方法或实例数据,从而节省了程序员的工作量。 因此,代码重用是为了您的需要扩展它而重用其他代码的好处。
  • 原因 呃...未理解好题目所想要表达的意思。
  • 错题2: Which of the following is an example of multiple inheritance?
    A . A computer can be a mainframe or a PC
    B . A PC can be a desktop or a laptop
    C . A laptop is both a PC and a portable device
    D . A portable device is a lightweight device
    E . Macintosh and IBM PC are both types of PCs
  • 解析 多重继承意味着一个给定的类继承了多个父类。 在上面列出的那些选项中,笔记本电脑继承了来自PC和便携式设备的特性。 A,B和E中的答案都是单个继承的例子,其中一个类至少有两个子类(在A中,计算机有儿童大型机和PC,B,PC有儿童台式机和笔记本电脑,E,PC有孩子Macintosh 和IBM PC)。 答案D表示一个类的属性。
  • 原因 对继承的概念理解混淆不清。
  • 错题3: A variable declared to be of one class can later reference an extended class of that class. This variable is known as
    A . protected
    B . derivable
    C . cloneable
    D . polymorphic
    E . none of the above, a variable declared to be of one class can never reference any other type of class, even an extended class
  • 解析 多态意味着变量可以有多种形式。 在普通情况下,Java被强烈定义,即一旦声明为某个类型的变量永远不会变为不同的类型。 这是一个例外,多态变量可以是任何类型的派生类(尽管不是同时,变量可以从一种类型变为另一种类型)。
  • 原因 我以为这道题是想问变量前面要声明为什么类型,没有理解题意。
  • 错题4: If you instantiate an Abstract class, the class or object you wind up with
    A . is also an Abstract class
    B . is a normal class
    C . is an Interface
    D . is a reference to an Object
    E . can't exist you cannot instantiate an Abstract class
  • 解析 你只能实例化具体类而不是抽象类。 但是你可以扩展抽象类和接口。
  • 原因 我把提意理解成写抽象类的子类的类型是什么...(英语不好是硬伤)

结对及互评

  • 博客中值得学习的或问题:
    • 排版精美,对于问题研究得很细致,解答也很周全。
  • 代码中值得学习的或问题:
    • 代码写的很规范,思路很清晰,继续加油!

点评过的同学博客和代码

  • 本周结对学习情况
    • 20172332
    • 结对学习内容
      • 第10章 多态性

其他

感觉这周的学习任务相较与上周又有了一定的提升,学起起来也更困难,但同时也是我更加意识到Java的学习是通过不断的亲身实践和练习才能不断提高的,书本上的内容和老师上课所讲的不过是理论而已,只能辅助你学习,不能完全依赖上课听讲,死啃书本。同时,在这周的测试中我也意识到了一个问题,很多题目的错误都是由于我对题目的翻译不到位导致理解错了题意所以导致了错误,希望在以后的学习生活中能继续不断提高自己的英语能力。也希望自己能在以后通过努力不断进步!

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 126 1/1 20/20
第二周 388/466 1/2 15/35
第三周 706/1162 1/3 17/52
第四周 1104/2266 1/4 20/72
第五周 1126/3392 1/5 15/87
第六周 906/4298 1/6 20/107
第七周 1233/5531 1/7 20/127
第八周 1391/6922 1/8 24/151
  • 计划学习时间:24小时

  • 实际学习时间:24小时

  • 改进情况:
    开学也有将近半个学期了,虽然自己的学习状态相比于刚开学的时候有了一定的提升,但是相比于他人还是感到自己的学习时间不够多,学习态度不够端正,在以后的学习正活中多学Java,我爱Java,Java使我快乐,Java使我身心愉悦!

参考资料

猜你喜欢

转载自www.cnblogs.com/yu-kunpeng/p/8974172.html