20172305 《程序设计与数据结构》第五周学习总结

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

教材学习内容总结

本周内容主要为书的5.1-5.6以及6.1-6.4的内容

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

  • 问题1:逻辑运算符和关系运算符
  • 问题1解决方案:在看第五章以前,经过老师在蓝墨云班课上发布的是视频中,对逻辑运算符和关系运算符有必定的认识,加之数学上也学过“或且非”(且即与之意)三者,一个是取对立的,一个则“一真则真”,一个则“一假则假”,并且在班课上还学习到运算符异或“^”、左移右移等运算符,并且经过异或运算符,能够进行简单的加密,是数据变化。极大的下降了运算符学习的困难。数据结构

    • 在三种逻辑运算符中,逻辑非具备最高的优先级,其次是逻辑与,最后是逻辑或。
    • 相等性运算符和关系运算符的优先级比算术运算符的优先级低
  • 问题2: if语句的运用
  • 问题2解决方案:if语句在以往的数学课上学过,对于if条件句,在没有看过本章的内容前,认为if语句是对承接上来的内容进行判断,对了经过一条语句,不对再经过一条语句,就是一种“分叉”的感受,以前的学习是停留在纸上,如今的学习是用在电脑上,因此和以前的还有必定的不一样,就好比说缩进格式,对于理解if里面的条件和语句有很大帮助,还有用到语句块的时候,应用到“{”、“}”是避免错误理解的有效方法,if-else的运用在代码调试中进行分析。编程语言

    • 缩进格式只对程序阅读者有意义,没有正确的分块缩进书写的语句,会是程序阅读者对代码的执行逻辑产生误解。
  • 问题3:浮点数的比较和字符的比较
  • 问题3的解决办法:
    • (1)浮点数的比较,我认为能够经过除法后与1进行比较,或者减法后与0比较,而书上所说的浮点数的比较,实在给定偏差标准的状况下进行比较二者是否相等。

      • 计算两个数差的绝对值并将差和某个偏差标准相比较
    • (2)字符的比较,能够理解为Unicode字符集内各个字符的排列顺序,若是字符a在字符b前面,那么字符a小于字符b。

  • 问题4: do、while、for语句
  • 问题4的解决办法:while语句是先判断,true则执行语句运算,false则跳过。do语句是先执行一次语句运算,再进行判断,true则返回执行语句,false则跳过。for语句是一种适用于循环执行前知道循环次数的状况。三者的嵌套和运用在代码调试中进行分析。

  • 问题5: 迭代器和ArrayList类
  • 问题5的解决方法: 迭代器的问题早在第七章就有所遇到,而第五章的系统性的学习,对迭代器有了更多的认识。对于迭代器的理解还不是很明白,有些问题在上网找过以后,仍有较大疑惑。

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

  • 问题1:PP5.1
  • 问题1解决方案: 对于问题中“年份可以被4整除且不能被100整除,或者同时可以被100和400整除”的理解,我在最初用逻辑运算符((years%4= =0&&years%100!=0)||(years%100= = years%400)) 来表示,结果就是特别神奇的逻辑错误,后来换了一种思路,用if的嵌套问题解决了。

  • 问题2:PP5.3
  • 问题2解决方案:在解决这个问题以前,我经过提早看第六章的示例代码,经过运用例6.2的运用,利用求余的办法不断从后面一位一位的判断数字,利用while中嵌套if语句解决的,也第一次真正运用到自增运算符,全程自主研发的代码,适用于正数和负数,可是经过后来给别人讲解过程当中,他人提出“0”的问题,在个人1.0版上倒是无做用的,可是“0”做为偶数,也是要算在内的,因此有自主研发出2.0版,经过加if语句进行判断来解决的。

  • 问题3:PP5.7
  • 问题3解决方案:刚接触到问题的时候感受蒙蒙的,什么石头剪刀布啊,还要机器随机产生,还得比较并记录结果。这个时候,忽然感受本身有一个爱因斯坦的脑壳就行了,惋惜本身只能经过写伪代码的方式进行,不过** 经过写伪代码,能够很清楚的知道本身这步要作什么,下步要干什么的问题,能过写伪代码的方式把问题划分为几个部分去解决,就像第七章的软件活动开发要先肯定软件需求同样,明确了方向。**对于石头剪子布的随机,个人想法是经过随机数产生,一个数对应一个,就确保了随机性。其次,我就想经过if条件句进行数字和字符串的对应,但经过看同窗的代码,发现能够用ArrayList类,把石头剪刀布装进去,再经过每个的索引值来取,算是完成了。接下来就是规则的编写,石头赢剪子,剪子赢布,布赢石头,感受就像一个乌比莫斯环同样,环环相扣,想用if语句,就嵌套一个并列式的if,结果就是找不到else,转而换为一大长串的逻辑符,进行表述((s1.equals("stone")&&s2.equals("scissors")||(s1.equals("scissors")&&s2.equals("cloth"))||(s1.equals("cloth"))&&s2.equals("stone"))。结果觉得和PP5.1同样,然而却成功了。没有逻辑错误。

  • 问题4:PP6.3和PP6.7
  • 问题4解决方案:两个代码的编写,使PPP6.3的阶梯式12×12的乘法表,弄成一行一个的乘法表,结果校对了好几遍的代码,最后发现是本身的print打成了println致使一行一个的问题。PP6.7的尝试是本身陷入到无限循环里面,每一次的java后就是满屏的*,快绝望了。对照了几遍本身的for语句,没有问题,结果高手的帮助,发现本身的“}”加错地方致使的。


代码托管

上周考试错题总结

  • 错题1 The behavior of an object is defined by the object's(对象的行为是由对象定义的。)methods(方法)
  • 错误解析: 方法指示对象在传递消息时如何反应。每一个消息都做为一个方法实现,而方法是在传递消息时执行的代码。构造函数是这些方法中的一种,可是全部的方法组合都决定了行为。可见性修饰符会间接地影响对象的性能。错误的把构造方法定义对象的行为,忽略了构造方法只不过是众多方法中的一个。
  • 错题2 In order to preserve encapsulation of an object, we would do all of the following except for which one?(为了保存一个对象的封装,除了哪个之外,咱们会作如下全部操做?)Make the class final
  • 错误解析:封装意味着类包含操做数据所需的数据和方法。为了正确地保存封装,实例数据不该该从类外部直接访问,因此实例数据是私有的,方法被定义为访问和操做实例数据。此外,访问和操做实例数据的方法被公开,以便其余类可使用该对象。保留字“final”用于控制继承,与封装无关。public变量是违反封装性,final修饰符用于定义常量的。

    封装这个解释,能够用CPU做为例子:
    CPU把全部的电阻电容门电路等都封装起来,只留出一些管脚(接口)让用户使用,CPU能暴露什么,不能暴露什么,是生产商设计决定的,用户不能直接操做CPU的电阻电容等等,但能够经过给管脚适当的电压来控制电阻电容等,也就是说用户不能直接访问CPU的属性,可是能够经过方法修改CPU的属性的值

  • 错题3 If a method does not have a return statement, then(若是一个方法没有返回语句,那么)it must be a void method(它必定是一种无效的方法。)
  • 错误解析: 全部的方法都隐含返回某个东西,所以必须有一个返回语句。可是,若是程序员但愿编写一个不返回任何内容的方法,所以不须要返回语句,那么它就必须是void方法(该方法的头有“void”做为返回类型).任何语句都要有返回值的,这个是我忽略了,没有考虑到是无效的方法,自觉得是会有语法错误的。
  • 错题4 Consider a sequence of method invocations as follows: main calls m1, m1 calls m2, m2 calls m3 and then m2 calls m4, m3 calls m5. If m4 has just terminated, what method will resume execution?(考虑一系列方法调用:主要调用m1, m1调用m2, m2调用m3,而后m2调用m4, m3调用m5。若是m4刚刚终止,什么方法将继续执行?)m2
  • 错误解析: 一旦方法终止,用调用该方法的方法控制简历。在这种状况下,m2调用m4,所以当m4终止时,m2恢复。本道题理解,感受很蒙,彻底的一头雾水。在看过答案后也不是很懂,随着答案的解释能够理解,但彻底不知道缘由为什么。
  • 错题5 Instance data for a Java class(Java类的实例数据。)may be primitive types or objects(多是原始类型或对象)
  • 错题解析: 实例数据是组成类的实体,多是任何类型的实体,不管是原始的仍是对象的,而且多是公共的或私有的。经过使用对象做为实例数据,它容许在其余类上构建类。类具备其余类的实例数据的关系称为has-a关系。就像RationalNumber类中的减法方法同样。
  • 错题6 Consider a Rational class designed to represent rational numbers as a pair of int's, along with methods reduce (to reduce the rational to simplest form), gcd (to find the greatest common divisor of two int's), as well as methods for addition, subtraction, multiplication, and division. Why should the reduce and gcd methods be declared to be private.(考虑一个Rational类,它的目的是将Rational的数字表示为一对int,以及方法减小(将Rational简化为最简单的形式),gcd(找到两个整数的最大公约数),以及加法、减法、乘法和除法的方法。为何要将reduce和gcd方法声明为私有的。)Because they will only be called from methods inside of Rational(由于它们只能从理性内部的方法中调用。)
  • 错题解析: 全部被声明为私有的类的全部项只能访问该类中的实体,无论它们是实例数据仍是方法。在这种状况下,因为这两种方法只从Rational的其余方法(包括构造函数)调用,所以它们被声明为私有,以提升信息隐藏的程度。注意,答案C不是一个正确的答案,由于reduce方法调用了gcd方法,因此其中一个方法是从构造函数之外的方法调用的。忽略了reduced方法是调用gcd方法的。
  • 错题7 Java methods can return more than one item if they are modified with the reserved word continue, as in public continue int foo( ) { ... }
    (若是使用保留字进行修改,Java方法能够返回多个项,如在public continue int foo(){…})false
  • 错题解析: 全部的Java方法都返回一个单独的项,无论它是一个原始数据类型的对象,仍是void。保留字continue用于退出循环的其他部分并再次测试该条件。作的时候很混乱,仔细想一想每个方法都只能返回单独的项,书上的例子就是最好的证实,每用一个方法都只能改变一个变量什么的。
  • 错题8 A method defined in a class can access the class' instance data without needing to pass them as parameters or declare them as local variables.(在类中定义的方法能够访问类的实例数据,而无需将它们做为参数传递或声明为局部变量。)true
  • 错误解析: 实例数据在全局上可用于全部类的方法,所以方法不须要做为参数接收它们,或者在本地声明它们。若是在方法中声明了与实例数据相同名称的变量,那么该方法中的实例数据将被“隐藏”,由于引用将是本地变量。
  • 错题9 During program development, software requirements specify(在程序开发期间,软件需求指定)what the task is that the program must perform(该程序必须执行的任务是什么?)
  • 错误解析: 规范阶段是理解手头的问题,这样程序员就能够肯定须要作什么来解决问题。上面列出的其余工做是设计阶段(A程序如何完成任务?, C如何将任务划分为子任务?)和测试阶段(D如何在程序完成后进行测试?)的一部分。个人想法是明确该程序是作什么的,就错误的选择A,是本身想表达的意思不够准确,没有准确理解题意。
  • 错题10 Static methods cannot(静态方法不能)reference non-static instance data(引用非静态实例数据)
  • 错误解析: 静态方法是类自己的一部分,而不是实例化的对象,所以静态方法在类的全部实例化对象中共享。因为静态方法是共享的,所以不能访问非静态实例数据,由于全部非静态实例数据都是特定于实例化对象的。静态方法能够访问静态实例数据,由于与方法同样,实例数据在类的全部对象中共享。静态方法也能够访问传递给它的参数。
  • 错题11 Java does not support multiple inheritance, but some of the abilities of multiple inheritance are available by(Java不支持多重继承,可是有一些多重继承的能力。)implementing interfaces(实现接口)
  • 错误解析:因为类能够实现任意数量的接口,因此该类本质上是使用接口类,就像在这个类中定义了这些接口同样。所以,这个类继承了接口的方法和常量。此外,该类能够扩展另外一个类,从而直接和间接地从多个类继承。这与多重继承不彻底相同,但它与Java的概念同样接近。对于继承的概念,没有好好理解

    • 继承是面向对象语言的一个重要机制,
      经过继承能够在一个通常类的基础上创建新类,被继承的类称为基类,
      在基类上创建的新类称为派生类。
      继承和派生其实都是一回事,只是说法不一样.
  • 错题12 In which phase of program development would you expect the programmer(s) to create the pseudocode?(在程序开发的哪一个阶段,您但愿程序员(s)建立伪代码?)Software design(软件设计)
  • 错误解析:伪代码是用相似英语的方式编写的算法的描述,而不是用特定的编程语言编写的。这是程序设计的一部分。在实现阶段,程序员将伪代码转换为正在使用的编程语言。一直错误的理解为要在肯定软件需求上进行写伪代码,实则要在软件设计上进行。

    • 软件需求用一个称为功能说明的文档来描述。
  • 错题13 Interface classes cannot be extended but classes that implement interfaces can be extended.(接口类不能被扩展,可是实现接口的类能够被扩展。)false
  • 错误解析:任何类均可以扩展,不管是接口、实现接口,仍是二者都没有。惟一的例外是,若是类被显式地修改成“final”,在这种状况下它不能被扩展。
  • 错题14 All objects implement Comparable.(全部对象实现可比性。)false
  • 错误解析:可比较的是一个接口,该类必须定义compareTo方法,并显式地声明它实现可与之相比较的实现。大多数类都没有实现可比较的。这道题纠正了我对比较的认识,一直觉得全部类,只要是相同的进行比较就能够的错误观念。

  • 本周的考试题数较多,并且本身期间还不当心把界面关了,致使本身作过的题又从从新作一遍,尽管这样,仍是有不少是不会的,甚至是“无从下手”去点击选项。感受本身对书本的内容已经有所了解,可是仍是本考试所战胜。无奈

感悟

第五章和第六章的内容几乎都要是逻辑思考,逻辑运算,靠着之前的直接在脑里进行编译的方式,已经不行了。写一个代码,开始动用笔写写草稿了,感受这种方法不错,很适合对于这些刚开始感受蒙的项目。两章的内容和第四章、第七章相比,相对轻松,可是感受时间较短,学起来有点吃不消,还要应对其余事情。并且本周进行的5.7的编写虽然有部分是借鉴的,可是感受本身和电脑进行人机对抗,(想设计一个bug可让人一直赢的方式)玩了好几把,几乎是平局和机器赢,仅有少数几局是人赢得,感受本身造出的东西快要战胜我了,有点像*复仇者联盟*里的奥创,快要把钢铁侠打垮了同样。哈哈,就像白岩松的一部书名《痛并快乐着》,最枯燥的字符之间,也会有最快乐的因子;最无趣的代码面前,也会创造出鲜活的生命(就像那个石头剪刀布同样)。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 136/136 1/1 15/15
第二周 570/706 1/2 20/35
第三周 613/1319 1/3 23/58
第四周 1249/2568 1/5 30/88
第五周 904/3472 1/6 30/118

参考资料

相关文章
相关标签/搜索