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

Posted gk0625

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20172301 2017-2018-2 《程序设计与数据结构》第5周学习总结相关的知识,希望对你有一定的参考价值。

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

教材学习内容总结

第五章

  • 运算符 (相等性运算符、关系运算符、逻辑运算符)
  • if语句、if-else语句、if语句嵌套
  • 数据比较(浮点数比较、字符比较、比较对象)
  • while语句
  • 迭代器 (完全看不懂)
  • ArrayList类 (和枚举型有什么区别吗...)

第六章

  • switch语句 (break语句)
  • 条件运算符 (类似条件语句)
  • do语句
  • for语句、for-each循环

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

  • 问题1:===的区别。
    ==equals的区别。
  • 问题1解决方案:
    • 首先,我们知道=是在第二章数据与表达式中的内容;equals方法在String类那里提过;==就是刚学的相等性运算符。
      ===是便于区分的,因为=是赋值运算符;==则是判断,输出的是结果——true、false。 这里就不详细举例。
      参考资料:在java中=和==的区别
    • ==equals有什么区别呢? ==是一个操作符,equals就是一种方法。
      ?? 在书P148 给出了一个例子:

      String str = "software";
      if (str == "software")
         System.out.println("References are the same");
      if (str.equals("software"))
         System.out.println("Characters are the same");

      因为,java在需要时只会为多次使用的一个字符串常量创建一个对象。

    • 那我们看几个例子:

      String str1 = new String("abc");
      String str2 = new String("abc");
      System.out.println(s1.equals(s2));
      System.out.println(s1 == s2);
      判断一下输出的是什么? true、false
    • 下一个:

      String s1 = "abc";
      String s2 = "abc";
      System.out.println(s1.equals(s2));
      System.out.println(s1 == s2);

      判断一下输出的是什么? true、true
      为什么同样都是创建一个字符串对象,确实不一样的结果。
      简单说下我的理解,==根据书上的解释:

      判断这些对象是否彼此互为别名(它们是否含有相同的地址)。 

    这和equals方法判断含有相同的字符确实是完全不同的。而第二个例子也就是所说的多次使用的一个字符串常量创建一个对象,它们就是同一个地址。第一个例子则是创建了两个对象,地址不同了,那么判断就是错喽。

    参考资料:

    Java中==号与equals()方法的区别
    如何“记住” equals 和 == 的区别?
    equals和==的区别

  • 问题2:ArrayList类和枚举型的区别。 怎么说呢?这两个里面都可以放字符串,然后对其进行操作。所以我觉的两个应该是差不多?
  • 问题2解决方案:这种问题只能百度了吧。从书上只能简单了解到ArrayList类是数组。
    这里我们参考下:枚举 跟 数组的区别?
    通俗说:

    枚举对象在任一时刻只能有一个常量值,数组对象在任一时刻可以有多个值.

    看下例子:

    Public Enum Enum1
      First = 1
      Second = 2
      Three = 3
        End Enum
    
    Dim e As Enum1, e_Array As Enum1(2)
    
    e = Enum1.Second
    
    e_Array(0) = Enum1.First
    e_Array(1) = Enum1.Second
    e_Array(2) = Enum1.Three  

    我们可以看出枚举确实只有一个常量值,而数组有多个。
    大致能明白吧,因为我们马上就学习数组,所以在这里我先不咬文嚼字,把疑问带下去,等以后更深学习了数组再来理解。

  • 问题3:switch语句的适用范围。
  • 问题3的解决方案:这个问题是第一遍看书疑惑的,然而,第二遍再看的时候直接就解决了,因为书上白纸黑字写着呢。感觉这个问题问的没有什么含金量吧。这里写出来也是为了督促自己看书认真一点
    附上有关switch语句的一些理解。

    1. switch的break语句是可选的,有时我们会利用这种特性(如上面的代码),但是一般情况下break是不能少的。否则可能会出现意料之外的错误。——没有break,程序会继续执行后面的代码。
    2. default语句也是可选的。相当于对应if-else语句最后的else。
    3. java语言用于匹配的选择因子必须是整形或字符型常量。这很重要。
    4. switch语句的比较是从上往下,所以把匹配概率大的选择因子放在前面可以提高效率。
    5. 选择因子具有唯一性,即不能有2个相同的因子存在。
    参考资料:

    Java switch-case 语句的优点和几点注意事项

  • 问题4:Java中几种循环语句的系统比较。
  • 问题4解决方案:
语句 特征 备注
while语句 先判断,后执行 不知道执行次数
do...while语句 先执行,后判断 至少被执行一次
for语句 循环变量和循环条件在一起 分号不可省略 知道执行次数
switch语句 表达式必为整型或字符型 可读性强

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

  • 问题1:什么时候需要初始化?
    技术分享图片

  • 问题1解决方案:

    成员变量在类存在的时候就已经初始化了,局部变量只有该方法被调用的时候才初始化。局部变量一定要赋初值,否则报错,成员变量如果不赋初值,系统默认给。

?? 最好尽量都把变量初始化。

  • 问题2:在做PP5.7的时候,用户输入的应该是“石头剪刀布”,但是,如果用户随便胡乱输入,我有什么办法 难道判定他赢吗?所以,我们需要排除用户输入其他的可能。
    看一下我编写的代码(完成后的):
    技术分享图片

?? 我开始想用户不输入“剪刀石头布”,那么计算机就会输出Be serious!;所以呢,我该怎么判断不是石头剪刀布呢?

  • 问题2解决方案:
    首先,我想比较字符串相等用的是equals方法,那么不相等是不是有notequals方法,或者unequals方法?我也不知道我为什么当时脑洞这么大。 所以,我就去API查查有没有这种方法?!
    可惜,没有。 怎么办?!

    那我只好把if和else对调。

?? 结果,我昨天晚上灵光一现,不是有逻辑运算符吗?
!(str.equals("剪刀") || str.equals("石头") || str.equals("布"))
Good job!

  • 问题3:nextInt和nextLine?
    技术分享图片

  • 问题3的解决方案:编写程序项目PP5.1的时候,我突发奇想给程序加上一个类似例5.9的while (another.equalsIgnoreCase("y"))会怎么样?然后我就正常的输入,结果,它竟然跳过了我的询问?!
    仔细一看,就发现了nextInt和nextLine,于是乎,再输入了一遍another = scan.nextLine

代码托管

技术分享图片
技术分享图片

上周考试错题总结

  • 为了保存一个对象的封装,除了哪一个以外,我们会做以下操作? D
    A。使实例数据为私有。
    B。定义类中的方法来访问和操作实例数据。
    C。让类的方法公开。
    D。使类变成final。
    E。以上都是保存封装。
    理解:封装的定义在书P108:

    封装意味着类外的代码难于甚至无法访问和修改该类内部声明的变量。

? ? 为了正确地保存封装,实例数据不应该从类外部直接访问。而保留字final,封装对于常量基本是无意义的,final和封装应该无关。

  • 如果一个方法没有返回语句,那么。 B
    A。它将在编译时产生语法错误。
    B。它一定是一种void的方法。
    C。不能从定义该方法的类之外调用它。
    D。它必须被定义为一种公共方法。
    E。它必须是一个int, double, float或String方法。
    理解:好吧,题意理解的不对,一个方法是必须有返回语句的,除非是没有返回值的void方法。

  • 访问器和修改器提供了对被封装的类进行受控访问的机制。 A
    A。真
    B。假
    理解:书P109,访问器方法名的形式为getX,同样,修改器的方法名的形式是setX。可以对实例数据进行访问和修改。

  • 在程序开发期间,软件需求指定。 B
    A。程序如何完成任务?
    B。该程序必须执行的任务是什么?
    C。如何将任务划分为子任务?
    D。如何在程序完成后进行测试?
    E。上面所有的
    理解:在程序开发阶段,我们应该明确这个程序需要干什么?即必须执行的任务是什么?上面列出的其他工作是设计阶段和测试阶段的一部分。应该分清软件设计的阶段。

  • All objects implement Comparable. B
    A . true
    B . false
    理解:这个完全是理解错了,有道翻译成了“所有对象实现可比性。”我当时看的一脸懵,然后也蒙了一个。其实,Comparable是一个接口,我们必须定义compareTo方法,然后声明实现接口,才可以。

  • 在黑盒测试中,测试人员应该已经知道程序是如何实现的,这样他/她就可以更仔细地识别出软件的哪个部分导致了错误。 B
    A。真
    B。假
    理解:黑盒测试,当然是摸黑测试了,什么都知道的话那叫glass-box testing玻璃盒测试了。

    黑盒测试: 在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。

    白盒测试: 白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。

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

?? 有时候,对很多概念理解不清晰不全面,在看到书146页的时候,哎呦,别名是啥?! 又开始往前面翻,无形之中就降低了自己的效率。或许,有时候就是不求甚解,往往只理解了表面的意思。这样的学习是没有丝毫效果的。就好像一座千年大堤慢慢的在崩坏。我们仅仅把例子输入上去够吗?能够合理的运用while,do...while,for,switch语句吗?能够清晰理解循环体吗?
?? 所以,有时候,我们稍微多花点时间,却能够收货成倍的效益。
?? 越往后学就越需要系统的思维,我们在编写的项目的时候,它会有很多很多的要求,你需要用到很多的方法和变量,那怎么才能合理有效的编写出来,还需要我们慢慢地摸索,一直向前努力。

?? 同样,眼光也不能仅仅局限于课本,课本的几个例子当中。不过总是说的时候精气满满,做的时候累死累活。看过这样的一句话,尽管可能有些刻薄:

累吗?累就对了!舒服是留给死人的。

?? 共勉!

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 122/122 1/1 20/20
第二周 487/609 1/2 18/38
第三周 482/1091 1/3 22/60
第四周 1357/2448 1/4 20/80
第五周 628/3106 1/5 20/100

参考资料

以上是关于20172301 2017-2018-2 《程序设计与数据结构》第5周学习总结的主要内容,如果未能解决你的问题,请参考以下文章

20172301 2017-2018-2 《程序设计与数据结构》实验五报告

20172301 2017-2018-2 《程序设计与数据结构》第7周课堂测试修改报告

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

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

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

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