20172323 2017-2018-2 《程序设计与数据结构》第五周学习总结
教材学习内容总结
- 条件语句和循环语句可用于控制程序的执行流程
- 条件语句(选择语句)允许选择下一条执行的语句。Java中主要的条件语句有if、if-else、switch语句
- 循环语句可以是程序多次执行某些语句,主要的语句有while、do、for语句
- 相等性运算符和关系运算符:“==”和“!=”用于判断两个值是否相等。
- 逻辑运算符:逻辑非“!”,逻辑与“&&”,逻辑或“||”。逻辑运算符常用于构成复杂的条件。
- if语句:if语句后的布尔表达式如果为true则执行if语句中的语句,再执行if语句后的语句;若为false,则直接执行if语句后的语句。
- if-else语句:该语句可以使程序在某个条件表达式的值为true时执行一段代码,其值为false时执行另一段代码。
- switch语句:switch语句将一个指定的字符或整型值分别与若干个case子句中的值进行匹配。
- break语句用来退出switch语句中的各个case子句。
- 语句块的使用,if语句的嵌套:在一个嵌套的if语句中,else子句和它前面最近且未匹配的if语句相匹配。
- 数据比较
- 浮点数比较:比较两个浮点数的相等性时,尽量少用符号运算符。应该计算两个数差的绝对值并将差和某个误差相比较。
- 字符比较:利用Unicode字符集定义java中字符的相对顺序,数字在大写字母之前,大写字母在小写字母之前。
- 比较对象:String类中equals方法比较两个字符串的字符是否相同,compareTo方法用于判断两个字符的相对顺序关系,该方法的返回值是一个整型数。
- while语句:执行相同的语句直至条件变为false
- break和continue语句:该两种语句会影响程序中的条件控制和循环,但在程序中要避免使用。
- 迭代器:迭代器是一种对象,可以用来处理相关的一组元素
- 每一个迭代器对象都有一个可以返回布尔值的hasNext方法。
- ArrayList类:保存着对象的列表且可以用整型索引值访问这些对象。
- do语句:do循环的循环体至少会执行一次。
- for语句:通常用于已知循环次数的情况。
教材学习中的问题和解决过程
- 问题1:为什么比较浮点值的相等性时要小心?
- 问题1解决方案:浮点数在内部是以二进制数保存的,所以只有当每一位都相等时,这两个数才相等,但是最好应设置一个误差值来判断两个数是否相等。
- 问题2:如果case子句后面没有break语句,会发生什么情况。
- 问题2解决方案:尝试一下,如图
我将所有的break语句删除,并没有出现书上所谓的执行下一条case子句,而是执行default之后的指令。
当我只除去其中一条break语句后
即出现了答案所示的情况,将执行下一条case子句
代码调试中的问题和解决过程
- 问题1:在编写PP5.3过程中,编写统计奇数、偶数和零的代码如图所示
输入“20172323”后得到的统计结果如图
也就是程序并没有将偶数和零分辨开。 - 解决:在此程序中,我定义的number的变量类型是String,虽然输入的是一串数字,但计算机比较时是按照字符串的形式在进行比较,所以参照的是Unicode表,在该表中“0”为48,所以只需要将原命令修改为
number.charAt(left) == 48;
,统计时就不会再出错。 - 问题2:编写PP52过程中,最后设置的再次运行(y/n)出现乱码。
- 解决:在编写过程中,只定义了一个scan对象
所以在运行时,用户向同一对象中输入两个信息会导致计算机无法识别。
设置两个对象即可解决问题。
- 问题3:编写例5.10的例子时,在bin文件夹下创建了一个urls.inp的输入文件,如图 ![](https://images2018.cnblogs.com/blog/1332964/201804/1332964-20180410204648367-614853335.png) 但在最终运行时,系统提示无法找到该文件 ![](https://images2018.cnblogs.com/blog/1332964/201804/1332964-20180410204732291-1138381017.png) 还没找到解决方案。 |
-
问题2:A class' constructor usually defines(一个类的构造函数通常定义:)
A.how an object is initialized(对象如何初始化)
B.how an object is interfaced(对象是如何交互的)
C.the number of instance data in the class(类中的实例数据)
D.the number of methods in the class(类中的方法)
E.if the instance data are accessible outside of the object directly(实例数据是否能被类外部的对象直接引用) -
解析:构造函数(constructor)是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 。
-
问题3:Instance data for a Java class
A.are limited to primitive types (e.g., int, float, char)
B.are limited to Strings
C.are limited to objects(e.g., Strings, classes defined by other programmers)
D.may be primitive types or objects, but objects must be defined to be private
E.may be primitive types or objects -
解析:实例数据是组成类的实体,它可以是任何可用的类型,无论是原始的还是对象的,public型还是private型。
-
问题4:Java methods can return only primitive types (int, double, float, char, boolean, etc).
A.true
B.false -
解析:Java方法同样可以返回一个对象,如字符串String。
-
问题5:Formal parameters are those that appear in the method call and actual parameters are those that appear in the method header. (形式参数是在方法调用中出现的参数,实际参数是在方法头中出现的参数。)
A.true
B.false -
解析:实际参数是在方法调用中出现的参数,形式参数是在方法头中出现的参数。
-
问题6:All Java classes must contain a main method which is the first method executed when the Java class is called upon.(所有的Java类都必须包含一个main方法,这是在调用Java类时执行的第一个方法。)
A.true
B.false -
解析:只有驱动程序需要一个main方法。驱动程序是在任何Java程序中首先执行的,但是它可以根据需要调用其他类,而这些其他类不需要main方法。
-
问题7:Every class definition must include a constructor.
A.true
B.false -
解析:Java允许在没有构造函数的情况下定义类,然而,在这种情况下,有一个默认的构造函数。
-
问题8:During program development, software requirements specify
A.how the program will accomplish the task
B.what the task is that the program must perform
C.how to divide the task into subtasks
D.how to test the program when it is done
E.all of the above -
解析:软件需求指定了程序必须完成的功能,指明了程序应当执行的任务,而不是描述如何执行所规定的任务。通常,任务需求用一个称为功能说明的文档来描述。
-
问题9:An object that refers to part of itself within its own methods can use which of the following reserved words to denote this relationship?(一个在自己的方法中引用自身部分的对象可以使用下列保留的词语来表示这种关系?)
A.inner
B.i
C.private
D.this
E.static -
解析: this引用允许对象引用自己。非静态方法需要通过具体的对象和类来引用,this引用可用于引用当前正在运行的对象。
-
问题10:Inheritance through an extended (derived) class supports which of the following concepts?
A.interfaces
B.modulary
C.information hiding
D.code reuse
E.correctness -
解析:通过延长一个类并继承它,新类不必重新实现任何继承的方法或实例数据,从而为程序员节省了一项工作。因此,代码复用是通过将其扩展为需要而复用其他人的代码的能力
-
问题11:Java does not support multiple inheritance, but some of the abilities of multiple inheritance are available by
A.importing classes
B.implementing interfaces
C.overriding parent class methods
D.creating aliases
E.using public rather than protected or private modifiers -
解析:由于类可以实现任意数量的接口,所以该类本质上是使用接口类,就好像这些接口是在该类中定义的那样。因此,该类继承了接口的方法和常量。此外,该类还可以扩展另一类,从而直接或间接地从多个类继承。这与多重继承并不完全相同,但它与Java的概念非常接近。
-
问题12:The goal of testing is to
A.ensure that the software has no errors
B.find syntax errors
C.find logical and run-time errors
D.evaluate how well the software meets the original requirements
E.give out-of-work programmers something to do -
解析:测试是必需的,因为所有的软件都有错误。复杂的系统在发布之前尤其需要测试。所寻找的错误类型是逻辑错误和运行时错误。所有的语法错误都将在实施过程中被识别和修复。
-
问题13:Interface classes cannot be extended but classes that implement interfaces can be extended.(接口类不能被扩展,但是实现接口的类可以被扩展。)
A.true
B.false -
解析:任何类都可以被扩展,无论它是一个接口,还是实现一个接口,或者两者都没有。唯一的例外是,如果该类被显式地用“final”这个词进行修饰,在这种情况下,它不能被扩展。
-
问题14:All objects implement Comparable.
A.true
B.false -
解析:可比性是一个接口,类必须定义compareTo方法,并声明它实现了可比较性。大多数类没有实现可比性。
-
问题15:In black-box testing, the tester should already know something about how the program is implemented so that he/she can more carefully identify what portion(s) of the software are leading to errors.
A.true
B.false -
解析:如果测试人员确实知道程序是如何工作的,那么测试人员的测试用例可能是有偏见的。
其他
感觉这周像是轻松了不少,第五,六章的内容相较于上周也要简单很多,可是考试也没有考得多好。有一个很大的原因是单词的积累量不够,特别是一些计算机技术的专业名词我的积累量明显不足。这点需要特别注意。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 117/117 | 1/1 | 19/19 | |
第二周 | 289/406 | 1/2 | 21/40 | |
第三周 | 403/809 | 2/4 | 22/62 | |
第四周 | 1783/2592 | 1/5 | 35/97 | |
第五周 | 770/3362 | 1/6 | 25/122 |
-
计划学习时间:20小时
-
实际学习时间:25小时