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

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

教材学习内容总结

第五章

  • 运算符
    • 相等性运算符,包括==!= ===的区别)
    • 关系运算符,算术运算符的优先级更高。
    • 逻辑运算符,优先级 ! > && >||
  • if语句、if-else语句、if语句嵌套。当输出两句话的时候运用语句块。
  • 数据比较
    • 浮点数比较:绝对值和0.0001比较,接近就是相等。
    • 字符比较:比较的是Unicode中的值。<span style="color:blue">谁的值大,谁就在后 </span>
    • 字符串比较:compareTo 本质就是比较字符。 <span style="color:blue">如果正值,就后于被比较的值 </span>
    • 比较对象:经过接口来实现。
  • while语句 (<span style="color:green"> 先判断,后执行。</span>)
  • 迭代器 (彻底看不懂)
  • ArrayList类 (和枚举型有什么区别吗..

第六章

  • switch语句 。 (有关switch语句)
  • 条件运算符 ---?:(相似条件语句,而且两个符号老是分开的。
  • do语句 (<span style="color:green"> 先执行,后判断,至少被执行一次。</span>)
  • for语句 (知道执行的次数) 形式: for(初始语句; 语句表达式; 增量代码; )
  • for-each循环

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

  • 问题1:===的区别。<span id="jump"> </span>
    ==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");

<span style="color:red">由于,java在须要时只会为屡次使用的一个字符串常量建立一个对象。</span>html

- 那咱们看几个例子:
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(s1.equals(s2));
System.out.println(s1 == s2);

判断一下输出的是什么? true、false
- 下一个:java

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

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

判断这些对象是否彼此互为别名(它们是否含有相同的地址)。
这和`equals`方法判断含有相同的字符确实是彻底不一样的。而第二个例子也就是所说的**屡次使用的一个字符串常量建立一个对象**,它们就是同一个地址。第一个例子则是建立了两个对象,地址不一样了,那么判断就是错喽。  

<table><tr><td bgcolor=#D1EEEE>参考资料:  </td></tr></table>

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

  • 问题2:ArrayList类和枚举型的区别。 怎么说呢?这两个里面均可以放字符串,而后对其进行操做。因此我觉的两个应该是差很少? <span id="jump2"> </span>数据结构

  • 问题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语句的适用范围。<span id="jump1"> </span>测试

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

    1. switch的break语句是可选的,有时咱们会利用这种特性(如上面的代码),<span style="color:red">可是通常状况下break是不能少的。不然可能会出现意料以外的错误。</span>——没有break,程序会继续执行后面的代码。
    2. default语句也是可选的。至关于对应if-else语句最后的else。
    3. java语言用于匹配的选择因子必须是整形或字符型常量。这很重要。
    4. switch语句的比较是从上往下,因此把匹配几率大的选择因子放在前面能够提升效率。
    5. 选择因子具备惟一性,即不能有2个相同的因子存在。

    <table><tr><td bgcolor=#D1EEEE>参考资料:</td></tr></table>.net

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

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

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

  • 问题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。恍然大悟。老师曾经讲过nextInt和nextLine的用法,我也在前面总结过,这里算是尝到了错误的教训。对其理解的也更加深入。因而乎,再输入了一遍another = scan.nextLine

    • 偶然了解到了第二种方法,分享一下。咱们实例化了两个Scanner对象,一个scan和scan1,这样nextInt和nextLine谁都不会相互影响。一样能够编译成功。

代码托管



这一周,代码行数远没有上一周多,可是花在代码编写上的时间并很多。一方面,我这星期在研究博客园博客的格式和CSS码设计,但愿能把博客写的更加美观,不同凡响。固然,求分也是必定的 另外一方面,这一周的学习主要是条件判断和循环,须要对其有必定的理解才能更好的编写程序,因此也花了很多的时间琢磨。

上周考试错题总结

  • 为了保存一个对象的封装,<span style="color:blue">除了哪个之外,</span>咱们会作如下操做? 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。上面全部的
    理解:在程序开发阶段,咱们应该明确这个程序须要干什么?即必须执行的任务是什么?书P193:

软件需求指定了程序必须完成的功能,<span style="color:red">指明了程序应当执行的任务,</span>而不是描述如何执行所规定的任务。

   上面列出的其余工做是设计阶段和测试阶段的一部分。应该分清软件设计的阶段。书上的原话,看书不仔细

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

  • 若是您声明一个类构造函数有一个void返回类型会发生什么? D A。您可能会收到语法错误。 B。该程序将经过一个警告进行编译,可是您将获得一个运行时错误。 C。声明一个构造函数为void并无什么错。 D。类的默认构造函数将被使用而不是您声明的那个。 E。以上都不是
    理解:一个构造函数若是有一个void返回类型而且编写没有错误,是不会收到语法错误的。书上P116:

编译时,具备返回类型的构造方法(即便返回类型为void)将<span style="color:red">被转换为常规方法(方法名恰与类名相同) </span>,从而不能做为构造方法调用。一样是书上的原话,却没有更深的理解。惭愧。

  • 静态方法不能: B A。引用实例数据
    B。引用非静态实例数据
    C。引用其余对象
    D。调用其余静态方法
    E。调用非静态方法
    理解:静态方法不能访问非静态实例数据,<span style="color:blue"> 必须在其实例化,</span> 也就是new以后才能够调用。

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

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

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

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

   有时候,对不少概念理解不清晰不全面,在看到书146页的时候,哎呦,别名是啥?! 又开始往前面翻,无形之中就下降了本身的效率。或许,有时候就是不求甚解,每每只理解了表面的意思。这样的学习是没有丝毫效果的。咱们的学习应该基于课本,发散于课本,我看有的同窗书都快翻烂了。我也就是每次通读几遍。这样的学习,就好像一座千年大堤基础在慢慢的在崩坏。咱们仅仅把例子输入上去够吗?可以合理的运用while,do...while,for,switch语句吗?可以清晰理解循环体吗?
<span style="color:red">   因此,有时候,咱们稍微多花点时间,却可以收货成倍的效益。</span>
   越日后学就越须要系统的思惟,咱们在编写的项目的时候,它会有不少不少的要求,你须要用到不少的方法和变量,那怎么才能合理有效的编写出来,还须要咱们慢慢地摸索,一直向前努力。

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

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

<font color="#660000">   共勉!</font><br />

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 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

参考资料

相关文章
相关标签/搜索