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

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

教材学习内容总结

  • 4.8.1介绍了 迭代器(Iterator) 及其方法的简单使用
  • 第五章 编写类 进一步讨论了类和对象所涉及的技术。在重温了类是对象的蓝图等基础概念后,进一步拓展了如构造方法、封装、局部数据等的知识概念。更重要的是引入了测试的概念,其运行原理大致是通过编写测试代码来测验产品代码的缺陷、运行,从而达到完善代码的目的。

学习笔记:

  • 迭代器
    • hasNext()方法:判断还有没有下一个元素
    • next()方法:取出集合的下一个元素
    • for循环:用来遍历数组和集合
  • 类与对象:
    • 类是对象的蓝图
    • 对象有一个状态(state),它由与对象相关的属性(attribute)来定义
    • 对象还具有行为(behavior),这由与对象相关的操作(operation)来定义
    • 类的数据和方法都称为类的成员
  • 构造方法:
    • 与类同名的特殊方法
    • 常用于初始化每个对象对应的变量
    • 不能有返回值,即使是void也不允许
    • 若没有提供构造方法,系统会自动创建并使用一个默认的不带参数的构造方法
  • 可见性修饰符:public,private,protected
  • 访问方法和设值方法:
    • 实例数据通常被设为私有的,访问方法getX与设值方法setX可以控制管理数据
  • 参数
    • 形参(formal parameter):方法声明头部的参数名称
    • 实参(actual parameter):调用方法时传给方法的值
  • 局部数据:在类中但不在任何方法内声明的数据
  • this引用:this是一个保留字,能让一个对象指向自己
  • 方法重载:两个或多个方法具有相同的名字
  • 测试:通过测试来完成代码,好的测试是发现错误的测试

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

  • 问题1:如何访问私有的实例数据?
    • 书本内容:大多数对象含有访问和设值方法,允许客户按可控方式管理数据
    • 个人理解:声明为私有的数据只能在类的方法内访问,这样可以提高程序的安全性,但这也让数据无法像公有数据一样被直接访问,它需要设置访问方法getX和设值方法setX,如同“绕过”防火墙一样,来控制管理数据。只不过这种“绕过”是内部操作,而不是外部为了渗透攻击而使用的“绕过”。
  • 问题2:toString的用处?
    • 书本内容:以字符串形式返回数据;在将对象传递给print或println方法,以及将一个对象与一个字符串连接时,都会自动调用对象的toString方法,此时调用的是默认版本
    • 个人理解:虽然可以在打输出语句时直接调用toString的默认版本,但自己设计定义一个toString方法可以根据自己的需求与想法进行具体设计,例如在编写测试程序时,有时返回字符串可以使测试的比较更方便
  • 问题3:this的用处?
    • 书本内容:this是Java的一个保留字,它能让一个对象指向自己
    • 个人理解:在需要给类中的数据初始化时,不需要再想别的变量名来区分,用this引用自身,比如某自定义方法中有形参a,那在此方法中使用a时只需使用this.a来引用自己即可

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

  • 问题1:定义枚举类型显红
    15

    • 原因分析:enum枚举类型不能定义为局部变量
    • 解决方案:将enum定义为全局变量
  • 问题2:未初始化的enum变量影响调用类的启用
    16

    • 原因分析:enum变量b未初始化赋值
    • 解决方案:将b赋值为枚举中存在的Heads字符串,通过引用枚举类中的ordinal方法来决定boolean的取值
  • 问题3:Card程序生成牌的点数有问题
    17

    • 原因分析:switch语句case判断是字符形式而不是数值
    • 解决方案:case改为数值判断
  • 问题4: BoxTest程序不能正常使用isFull得到full的值
    18

    • 原因分析:getX方法是返回参数值,不能直接赋值
    • 解决方案:定义一个变量接受返回的数值,再修改此变量的值

代码托管

20

上周考试错题总结

错题1

What happens if you attempt to use a variable before it has been initialized?

A.A syntax error may be generated by the compiler

B.A runtime error may occur during execution

C.A "garbage" or "uninitialized" value will be used in the computation

D.A value of zero is used if a variable has not been initialized

E.Answers A and B are correct

  • 原因:编译器不会被要求去探测未初始化变量的使用,所以有时会一直运行到最后才发现它引起了结果错误
  • 理解情况:大多数时候编译器能够发现未初始化变量的使用并报出语法错误制止程序运行,但有时也会检测不到引起运行错误

错题2

In the StringMutation program shown in Listing 3.1, if phrase is initialized to "Einstein" what will Mutation #3 yield if Mutation #1: mutation1 = phrase.concat(".")?

A.Einstein.

B.EINSTEIN.

C.XINSTXIN.

D.einstein.

E.xinstxin.

  • 原因:没有仔细看书本3.1的案例,其中在mutation1 = phrase.concat(".")语句前还有一句mutation2 = mutation1.toUpperCase()
  • 理解情况:mutation2语句将所有字符转化为了大写字母,mutation3则把所有E换成了X

错题3

Which of the following will yield a pseudorandom number in the range [ -5, +5 ) given the following:
Random gen = new Random( );

A.gen.nextFloat( ) * 5

B.gen.nextFloat( ) * 10 - 5

C.gen.nextFloat( ) * 5 - 10

D.gen.nextInt( ) * 10 - 5

E.gen.nextInt(10) - 5

  • 原因:nextInt只能做到从-5到4,不能超过4,生成4.9等数字
  • 理解情况:nextFloat()*10-5可以生成[-5,5)内的一切小数

错题4

Consider the following two lines of code. What can you say about s1 and s2?
String s1 = "testing" + "123";
String s2 = new String("testing 123");

A.s1 and s2 are both references to the same String object

B.the line declaring s2 is legal Java; the line declaring s1 will produce a syntax error

C.s1 and s2 are both references to different String objects

D.s1 and s2 will compare "equal"

E.none of the above

  • 原因:没有注意s2中testing与123之间的空格
  • 理解情况:两种赋值方法都是正确的,不同就在于两个字符串是不同的

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 10000行 30篇 400小时
第一周 209/209 2/2 9/9
第二周 290/499 2/4 18/28
第三周 516/1015 2/6 22/50

结对及互评

点评20182320:

  • 博客中值得学习的或问题:
    • 图片排列整齐,排版精美
    • 自己积极思考,最终解决问题
    • 结尾有自己真切实际的感悟
    • 错题反思具体明确
    • 学习情况记录详细完善
  • 代码中值得学习的或问题:
    • 代码简洁明了,功能齐全却不冗长
  • 基于评分标准,我给本博客打分:19分。得分情况如下:
    • 正确使用Markdown语法(加1分)
    • 模板中的要素齐全(加1分)
    • 教材学习中的问题和解决过程(加2分)
    • 代码调试中的问题和解决过程(加5分)
    • 本周有效代码超过300分行的(加2分)
    • 其他加分,加8分 :
      • 排版精美(加1分)
      • 进度条中记录学习时间与改进情况(加1分)
      • 感想,体会不假大空的(加1分)
      • 结对学习情况真实可信的(加1分)
      • 代码Commit Message规范(加1分)
      • 错题学习深入(加1分)
      • 有动手写新代码(加1分)
      • 点评认真,能指出博客和代码中的问题(加1分)

点评过的同学博客和代码

  • 本周结对学习情况

  • 结对学习内容
    - 自定义类的编写
    - 单元测试的编写
    - UML图的画法
    - 接口代码的基础应用
    - 理解掌握封装的概念与应用

  • 上周博客互评情况

posted @ 2019-09-30 17:01  陆彦杰  阅读(266)  评论(2编辑  收藏  举报