学号 2017-2018-2 《程序设计与数据结构》第五周学习总结
教材学习内容总结
- 了解逻辑以及条件符号的意义
- if-else语句用法以及在嵌套语句的缩进意义
- 浮点数是指二进制近似表示小数,所以比较大小时注意精度问题
- 字符以及字符串比较时,是比较地址还是通过Unicode码来进行比较的区别。
- while语句应当注意的问题,防止出现无限循环或循环出错。
- switch语句中break语句的执行的意义
- 条件运算符与条件语句的区别;其可读性劣于语句
- do语句至少执行一次
- for语句()中三个条件分别代表的三部分,变量的初始化,条件的判断(执行前计算),变量的增量计算
教材学习中的问题和解决过程
- 问题1:字符串比较时,compareTo方法与其他问题中的比较
- 问题1解决方案:compareTo方法是Comparable的方法。上周学习过程中还是理解的还是不够透彻。这次,在书上的举例中发现了compareTo方法的举例,其中有,
int result = name1.compareTo(name2);
直接将compareTo方法进行调用。但是,在第七章的PP7.4中,是将其首先在类中实现接口,再将其进行具体编译,指明不同条件下的输出结果。
如图:
但是,为什么在书中例题可以直接实现其调用呢,在jdk中进行查找,可以看到种类众多的不同数据类型的compareTo方法,
且都在lang或Math下,这就意味着在这些类下,compareTo方法是直接可以调用的。其根本原因是因为它们都实现了接口comparable接口,并且实现了接口中的compareTo方法。所以,在自己编写类时,和其他类不同,并未事先实现,所以自然要自己实现接口。而compareTo的核心在于比较,而且其输出的int值更是可以进行自行规定。而这又要反过来运用if-else语句进行规定.同时括号内的参数也决定了它的比较对象。
- 问题2:break语句对switch语句的影响
- 问题2解决方案:
- 在对书上6.1的例题的练习中,因为疏忽,只在最后一行输入了break,其结果,导致所有的case语句输出。换言之,在没有break的情况下,switch语句 一旦找到匹配的case分支(表达式的值与case后的值相等),程序开始执行这个case执行体,不在判断与后面case、default标签的条件是否匹配,除非遇到break才结束该执行体。也就是说,一旦遇到满足条件的case,且没有break的情况下,后续的case不再得到判断,而是直接变为执行体。所以说,对于switch语句,break不可或缺。同理还有default,使得在没有满足条件的情况下,依然有结果可以输出。
代码调试中的问题和解决过程
-
问题1:首先是上周的代码脚本检测时报错的问题。
-
问题1解决方案:在老师的指导下,首先逐行运行命令,在运行这行命令时出现问题。
find . -name "*.java"| xargs cat | grep -v ^$ | wc -l
这种问题需要逐个文件进行排查,经过查找,发现了一个问题文件,看到后我就想起了过程,当时需要将几个文件移动并修改名称,再次过程中将.class错误的命名为了.java。将文件删除后,一切恢复正常。
-
问题2:PP5.1的编写
-
问题2解决方案:编写完成后,无法执行语句,最后发现时while语句后多了一个分号,导致编译错误,但当时并未学习到do语句,所以在怀疑为什么不提示报错。当看到do-while时,发现,while语句后可以跟分号,但会产生不同的结果。
-
问题3:PP5.3的编写
-
解决方案:最后发现在读取字符串的长度时,将索引值与长度搞混,导致程序无法读取到数据,导致出错。索引值是由0开始的,而长度则是由1开始,所以不可搞混。
-
问题4 : PP5.7的编写
-
在有多个if和else时,出现了问题,例如
if ()
{}
else
{}
else{}
在这种情况下,会提示有else无if,也就是说if语句下若有多个语句需要继续判断时,(一个else不足以解决时)需要“else if”来执行。
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
- 错题1
The relationship between a class and an object is best described as
-
原因,理解情况:
-
类是方法,所以是抽象的,所以对象是在实例化后执行类方法的具体表现
-
错题2
In order to preserve encapsulation of an object, we would do all of the following except for which one?
- 原因,理解情况:
- 可以允许或不允许访问来保证其封装。但是final只是用来定义变量,与封装无关。
- 错题3
What happens if you declare a class constructor to have a void return type?
A.You'll likely receive a syntax error
B.The program will compile with a warning, but you'll get a runtime error
C.There's nothing wrong with declaring a constructor to be void
D.The class' default constructor will be used instead of the one you're declaring
E.None of the above
- 原因,理解情况:
- A不会出现错误,将变为普通方法,即不再是构造函数B系统将使用默认构造函数C不会出现错误,除非有自己的编写错误,不再是构造函数。理解:构造函数不能有返回值类型,;类将会使用默认构造函数。
- 错题4
During program development, software requirements specify--what the task is that the program must perform
- 原因,理解情况:
- 软件需求指定了程序必须完成的功能,指明了程序应当执行的任务,而不是描述如何执行所规定的任务
- 错题5
Static methods cannot--reference non-static instance data
- 原因,理解情况:
- 未理解引用(reference)和调用(invoke),引用主要指地址的引用,调用则是指方法的调用
- 错题6
In a UML diagram for a class
- 原因,理解情况:
- UML类图包括类名,属性(数据),操作(方法),以及箭头
- 错题7
All Java classes must contain a main method which is the first method executed when the Java class is called upon.
- 原因,理解情况:
- 只有驱动程序需要一个主方法,而对于类,第一个为构造函数,其他的叫做方法
- 错题8
Java methods can return more than one item if they are modified with the reserved word continue, as in public continue int foo( ) { ... }
- 原因,理解情况
- 无论一个方法中有几个变量,其返回值只能有一个
- 错题9
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.
- 原因,理解情况:
- 实例数据是公开的,任何方法均可访问它
- 错题10
Every class definition must include a constructor.
- 原因,理解情况:
- 构造函数可以没有,因为系统会自动构造一个默认的构造函数
- 错题11
In order to create a constant, you would use which of the following Java reserved words?
- 原因,理解情况:
- final 保留符用来创建常量
- 错题12
An object that refers to part of itself within its own methods can use which of the following reserved words to denote this relationship?
- 原因,理解情况:
- 如果出现两个变量同名,可以使用this来进行区分,来定义局部变量
- 错题13
An object that refers to part of itself within its own methods can use which of the following reserved words to denote this relationship?
- 原因,理解情况:
- 上面的问题也已提到,为了实现比较,需要实现compareTo方法
单词总结:
encapsulation(封装) syntax error(语法错误)
compile(编译) invoke(调用) instance(实例的)
denote(指示)
其他
- 本周难度较上周较为减轻,但是循环语句的逻辑性较强,需要仔细思考,同时,在循环嵌套时,格式一定要规范,否则一旦出现问题,就会极难的排查。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 110/200 | 1/1 | 20/20 | |
第二周 | 425/500 | 2/2 | 18/38 | |
第三周 | 900/1000 | 4/4 | 22/60 | |
第四周 | 1500/1300 | 5/5 | 30/90 | |
第五周 | 2715/3000 | 6/6 | 20/110 |