20182316胡泊 第4周学习总结

20182316胡泊 2019-2020-1 《数据结构与面向对象程序设计》第4周学习总结

教材学习内容总结

迭代器

  • 定义:我认为迭代器就是为了处理某些集合,比如文本文件、数组等等,对集合中的每一个元素进行单独处理。
  • 迭代器提供了系统处理一组数据的简单且重复的机制,因此,迭代器属于循环范畴。
  • 迭代器的方法:
    • hasNext:它返回一个布尔值,指出是否还有待处理的项目,因此可以作为循环终止的条件(迭代器一直认为有元素要输入,只是还没出现)
      • hasNext的变形:hasNextInt、hasNextDouble
    • next:获取集合中下一项元素。
      • 变形:nextInt、nextDouble
  • 迭代器与for循环
    • 例:for-each语句
for(Book myBook:bookList)
    system.out.println(myBook);

等价于

Book mybook;
while(bookList.hasNext())
{
    myBook=bookList.next();
    System.out.println(myBook);
}

编写类

  • 类:包括类的对象(属性)与行为(操作)
  • 使用类的过程:
    • 编写类:包括
      • 数据声明(一般为private,因为要在该类中使用)
      • 编写需要类完成的服务(操作)
    • 编写要使用该类的程序(这个程序与类必须在同一个文件夹内)
    • 实例化一个对象,可通过该对象使用类里的所有方法
  • uml类图
    • 有助于呈现呈现程序中类与类的内容之间的关系。
  • 封装
    • 定义:一个对象应该是自我管理的,即对象的实例数据应该仅由该对象来修改。
    • 例如,一个类内的声明变量,应该仅由类内访问并修改,类外不应该也不能修改变量的值。
    • 交互方法——接口(interface)
    • 可见性修饰符
      • public(公有的)可从类外直接访问,为客户提供服务
      • prvate(私有的)不可~,支撑类中的其他方法
      • protected(保护的)只与继承关系相关
    • 把常量声明为public是常见的,因为使用了final修饰符声明的,即使可以访问但不能修改值,也满足封装的要求。
    • 访问方法:在类中访问私有实例数据的方法,叫做访问方法getXXX(由于他提供了只读访问,因此不影响封装)
    • 设置方法:setXXX,改变了一个具体的值。
      • 快速打出set和get:ctrl+insert或者右键———generator——set and get。

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

  • 问题1:useDelimiter的意义与使用方法
  • 问题1解决方案:
    • 在Java语言中,格式化输入是通过类java.util.Scanner来完成的。默认情况下,Scanner是使用“空白”作为分隔符将输入分解为标记。
    • 由于Scanner对象将首先跳过输入流开头的所有空白分隔符,然后对输入流中的信息进行检查,直到遇到空白分隔符为止
    • 那如何将含有空格的数据输出呢?这时就需要用Scanner.useDelimiter( )方法,可以将分隔符号修改为"回车",或者其他字符。
Scanner scan = new Scanner(System.in).useDelimiter("\n");
  • 问题2:编写类时,在定义类名后,下面的方法作用是什么?
public 类名
{
    
}
  • 问题2解决方案:构造方法是一种特殊的方法,它是一个与类同名的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载。
  • 问题3:
public static void main(String args[]) throws Exception{
        String s=args[0];
        int key=Integer.parseInt(args[1]);
  • 问题3解决方案:构造了一个一个名为args的字符型数组,用来接收字符串,加在 java 程序名后面。

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

  • 问题1:在运行zookeeper的feedall方法时,在类名后面出现乱码

  • 问题1解决方案:编辑一下实例化接口的toString方法

  • 问题2:在编写coin程序时,返回boolean型,程序mycoin运行时,不满足条件只能返回tail。

  • 问题2解决方案:将判断条件由d.Head改为Wu3.Sui.Head,因为在Wu3_1中的枚举型Sui与在Wu3中的枚举型不同,因此要使用源程序的枚举型作为判断条件。

  • 问题3:在产生随机数时,只能产生1

  • 解决方案:加上括号,因为(int)强制转换的优先级高于乘法,因此产生的随机数被直接转成了0

代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

  • 错题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 true regarding Java classes?(对于Java类,下面哪个选项是正确的?)
    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支持继承,但不支持多重继承,因此Java类可以有任意数量的子元素,但只有一个父类。此外,由于所有Java类都直接或间接地从对象类继承,所有Java类都只有一个父类。在做此题的时候,考虑了终极父类--Object类,因为它没有父类,所以选择则了E选项,但是,老师说可以把Object类看作自己是自己的父类的问题,我也表示很无奈。心疼这一分......
  • 错题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: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(通过运行时的Java运行环境。)
    E.by the user at run time
  • 错误解析:多态变量可以包含许多不同的类型,但是在程序执行之前,它不知道是哪一种类型。在引用变量时,必须做出决策。这个决策是由运行时环境根据变量的最新分配而做出的。这道题也是有关多态的问题,所以看过第十章之后,是动态绑定的问题,效率较早期绑定低,但是动态绑定,体现了多态的灵活性。
  • 错题5:Using the reserved word, super, one can(使用保留字super,可以)
    A.access a parent class'constructor(s)
    B.access a parent class'methods and instance data
    C.access a child class'constructor(s)
    D.access a child class'methods and instance data
    E.none of the above
  • 错误解析:保留字super提供了一种机制,用于访问父类的方法和实例数据(不管它们是否隐藏)。此外,可以使用super来访问父类的构造函数。正确答案是A和B的组合选项。
  • 错题6: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(不能存在不能实例化一个抽象类)
  • 错误解析:抽象类其实是可以实例化的,但是他的实例化方式不是通过new方式来创建对象,而是通过父类的引用来指向子类的实例来间接地实现父类的实例化(因为子类要实例化前,一定会先实例化他的父类。这样创建了继承抽象类的子类的对象,也就把其父类(抽象类)给实例化了).但是:接口是不能被实例化的(接口压根就没有构造函数)。
  • 错题7:A derived class has access to all of the methods of the parent class, but only the protected or public instance data of the parent class.(派生类可以访问父类的所有方法,但只访问父类的受保护或公共实例数据。)
    A.true
    B.false
  • 错误解析:由于方法也可以声明为私有的,因此派生类无法访问任何私有方法。因此,派生类只能访问父类的受保护和公共方法和实例数据。没有看到访问所有方法,所以通过后半句就直接认为对了。
  • 错题8:If class AParentClass has a protected instance data x, and AChildClass is a derived class of AParentClass, then AChildClass can access x but can not redefine x to be a different type.(如果类AParentClass有一个受保护的实例数据x,而AChildClass是一个派生类的AParentClass,那么AChildClass可以访问x,但不能重新定义x为另一种类型。)
    A.true
    B.false
  • 错误解析:派生类可以重新定义父类的任何实例数据或方法。父类的版本现在是隐藏的,但是可以通过使用super.x来访问。父类的任何实例数据和方法都可以在子类里进行重写或是定义为不同类型。

结对及互评

  • 博客中值得学习的或问题:

    • 对上周的错题进行了仔细的更正和课后复习,我对上周考试题的复习较为草率。
    • 博客撰写详细,有理有据。
    • 在撰写博客的过程中可以加入更多自己的理解。
  • 代码中值得学习的或问题:

    • 代码风格良好,便于阅读。
  • 基于评分标准,我给本博客打分:14分。得分情况如下:

  1. 正确使用Markdown语法(加1分):

    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  2. 模板中的要素齐全(加1分)

    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  3. 教材学习中的问题和解决过程(2分)

  4. 代码调试中的问题和解决过程(3分)

  5. 本周有效代码超过300分行的(加1分)

  6. 其他加分:

    • 周五前发博客的加1分
    • 感想,体会不假大空的加1分
    • 进度条中记录学习时间与改进情况的加1分
    • 有动手写新代码的加1分
    • 错题学习深入的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习情况真实可信的加1分

点评过的同学博客和代码

  • 本周结对学习情况
    • 结对同学学号2332

    • 结对照片

    • 结对学习内容
      对上周及本周的考试内容进行了探讨,并通过上网查询等方式深入分析,直到将问题理解。
      一起制作博客,markdown,遇到问题相互询问,并解决。

其他(感悟、思考等,可选)

  • 程序的错误有时就是很细小,当编译出现错误时,我可能通过一种或一些奇怪的方法误打误撞编译成功,甚至运行成功了,但是这些小小的问题背后可能有很多深层的知识,如果不想办法解决,就只能一知半解,所以要有探索精神。
  • 书上的内容很多,而且有很多问题的解决方法,要多看书,多打代码。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 10000行
第一周 119/119 3/3 20/20
第二周 320 /300
第三周 856/800
第四周 1566/1300 2/2 25/25
  • 计划学习时间:25小时

  • 实际学习时间:20小时

参考资料

posted @ 2019-09-30 18:28  hp12138  阅读(207)  评论(2编辑  收藏  举报