20172314 2017-2018-2 《程序设计与数据结构》第5周学习总结
20172314 2017-2018-2 《程序设计与数据结构》第5周学习总结
教材学习内容总结
-
布尔表达式:相等性运算符:“==”,“!=”分别表示“相等”与“不相等”。
关系运算符:“<”, “>”, “<=”, “>=”分别表示“小于”, “大于”,“小于等于”,“大于等于”。
(以上运算符优先级大于算术运算符)。
逻辑运算符:“!”, “&&”, “||”分别表示“非”, “与”, “或”。 -
数据比较:重点在于浮点数比较:浮点数用二进制表示,两个数的长度可能不等,只有当两个浮点数的二进制数位相等时,浮点数的值才相等,所以应该计算两数的差与一个误差标准相比。
-
字符比较:Unicode值比较
-
字符串比较:String类提供comepareTo方法,返回-,+,0 (返回非布尔值);
还有equals : string.equals(string2),返回true/false。 -
if语句:条件判断为true则继续执行,否则不执行if语句中的语句。
-
if-else语句:条件成立执行第一条语句,否则执行第二条语句。加{}可执行多条语句(语句块)。
-
while语句:条件成立时执行语句,与if区别在于他执行完后会再次计算表达式的值,如果仍然为true,将再次执行循环体,直到表达式为false。
-
嵌套循环:一个循环中包含另一个循环。内层循环结束后再继续执行外层循环。
-
迭代器:是一种对象,提供了一些方法有助于一次处理某个集合,每个迭代器对象都有一个可以返回布尔值的hasNext方法,可以充当处理每项元素的循环控制条件。
-
switch:将一个指定的字符或整型值分别于若干个case子句中的值进行匹配。通常只需执行一种case子句下的语句,所以break语句几乎是必须使用的。
-
条件运算符:“(布尔条件)?(表达式1):(表达式2)” ,如果布尔条件的运算结果为true将返回表达式1,否则将返回表达式2。
-
while循环与do-while循环:前者先判断再执行;后者先执行一次后再判断是否接着执行。
教材学习中的问题和解决过程
- 问题一:for和while的区别是什么
- 问题一解答:
while:
while(Boolean_expression)
{
//Statements
}
如果布尔表达式的结果为真,则循环中的动作将被执行。这将继续下去,只要该表达式的结果为真。当表达式进行测试,结果为 false,循环体将被跳过,在while循环之后的第一个语句将被执行。
for:
for(initialization; Boolean_expression; update)
{
//Statements
}
初始化步骤首先被执行,然后计算布尔表达式,如果结果为false,不执行循环语句,跳转到循环语句之外下一句;如果结果为true则执行循环体,再执行更新,然后再次计算布尔表达式,如果还为true则重复执行循环体,否则跳出循环。
- 问题二:教材课后题SR6.10
int low = 10, high = 0;
do
{
System.out.println(low);
low++
} while (low <= high);
我认为输出只有”10“,执行完一次后,判断条件不满足,不会再循环。但答案是”10,11,12......."无限的。之后把书上的代码实际操作了一遍,发现答案是错的,如图
代码调试中的问题和解决过程
-
问题一:错误提示找不到符号,如图
-
问题一解决:开始以为后面代码输入出错了,检查好几遍之后都觉得没有问题,联想到之前出现“找不到符号”的问题是因为名称输入错误,经历过一番苦苦寻找,加上与书上其他类似代码的比较之后,终于发现一开头就缺少了"import java.util.Scanner" <@_@>鉴于最近老是犯低级错误并且为之付出很多时间去修正,所以这个问题一定要记录下来并且置顶,提醒自己以后绝不能再犯同样的错误。
-
问题二:书上课后题PP5.3在编译运行后可以无限输入整数,无法终止,如图
-
问题二解决:自己检查后没有发现错误之处,在助教的帮助下发现了问题所在。如下代码是多余的,
while(xxx.hasNext())
String str = String.valueOf(num);
导致一直循环输入整数操作。我之前写它的时候是为了继续检索下一个字符,而我对输入整数的定义是int型,再纠正之后把它改为了String型,省去了很多操作。
-
问题三:在做PP6.6时,错误提示变量已在方法中定义。如图
-
问题三解决:错误原因在于之前已定义begin=0,但在for语句中再次定义。在编写for语句时,机械地套用for语句的一般使用方法,导致重复定义,但本来感觉应该是可以的,毕竟是同一个名称,但在提醒错误后又一想,int是用来声明一个新变量的,在第二次使用时,系统认为你要定义新的变量,但名称相同,故错误。
-
问题四:pp66编译运行成功之后,并没有如愿掷100次骰子,实际只运行一次。如图
-
问题四解决:检查代码后发现是由于for语句之后没有加“{}”,所以直接执行一次循环语句之后就输出了正面背面的次数并结束了程序。加上“{}”之后,便可以正常循环,循环完毕之后才输出。
-
问题五:pp66运行后结果如图,循环次数的总和是101
-
问题五解决:循环次数计算错误,改为如下图后,正好满足100次。当begin=0时,进行第一次操作所以当begin=99时进行第100次,将判断条件改为“begin<100”则正确,之前错误的原因是这里“begin<=100”,忽略了等于0时要运行一遍。
代码托管
上周考试错题总结
- 错题一:In order to preserve encapsulation of an object, we would do all of the following except for which one? Make the class final
- 错题一解析:这道题误认为把类封装了就可以保护类中的所有。封装意味着该类包含操作数据所需的数据和方法。为了正确保存封装,实例数据不应该从类之外直接访问,因此实例数据是私有的,方法被定义为访问和操作实例数据。此外,访问和操作实例数据的方法被公开,以便其他类可以使用该对象。“final”这个词是用来修饰的。类的方法设为private没有关系。
- 错题二:Interface classes cannot be extended but classes that implement interfaces can be extended.false
- 错题二解析:任何类都可以继承,无论它是一个接口,实现一个接口,还是两者都不能。唯一的例外是,如果对类进行了显式修改,使用了“find”一词,在这种情况下,它不能继承。
- 错题三:Inheritance through an extended (derived) class supports which of the following concepts?code reuse
- 错题三解析:通过扩展一个类并从中继承,新类不需要重新实现任何继承的方法或实例数据,代码重用是为了重用其他的代码的能力,通过继承它来满足的需要。
- 错题四:Static methods cannot reference non-static instance data
- 错题四解析:实例数据包含静态和非静态的,故实例数据可以引用静态方法。
- 错题五:Every class definition must include a constructor.false
- 错题五解析:java允许在没有构造函数的情况下定义类,但是在这种情况下使用了默认构造函数。
- 错题六:All objects implement Comparable. false
- 错题六解析:这道题目错在理解吧。可比较的是一个接口,类必须定义compareto方法并明确声明它实现的可比较的是可比较的实现。大多数类没有实现可比较的。
- 错题七: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
- 错题七解析:实例数据对所有类的方法都是全局可用的,因此这些方法不需要接收它们作为参数或在本地声明它们。如果与实例数据同名的变量在方法中本地声明,那么实例数据将“隐藏”在该方法中,因为引用将是本地变量。
- 错题八:Java does not support multiple inheritance, but some of the abilities of multiple inheritance are available by implementing interfaces
- 错题八解析:因为一个类可以实现任意数量的接口,所以这个类在本质上使用接口类,就好像那些接口是在这个类中定义的。因此,这个类继承了接口的方法和常量。此外,该类可以扩展另一个类,从而直接或间接地从多个类继承。这与多重继承并不完全相同,但它与java接近。
- 错题九:All Java classes must contain a main method which is the first method executed when the Java class is called upon. false
- 错题九解析:只有驱动程序需要一个主方法。驱动程序是首先在任何java程序中执行的程序(apppls除外),但它可能会根据需要调用其他类,而其他类不需要主要方法。
- 错题十:The expressions that are passed to a method in an invocation are called. actual parameters
- 错题十解析:方法使用的是实际参数,声明变量时使用的才是形式参数。
其他
这周我犯了一个致命的错误,在把所有的代码push到码云上之后,由于commit不尽人意,于是便把他们全部删除了,再次push时出现了问题,导致所有代码都没有了இ௰இ,就在那个深夜,伟大的我把代码删的干干净净后,怀着一颗哇凉哇凉的心久久不能入睡...又怀着一颗哇凉哇凉的心上了一天课后——终于!!!晚自习时王老师给我找回来了代码!通过这件事情我深刻地意识到以后不能乱删东西,或者删之前都留个备份,否则可能有令人窒息后果。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 |
第一周 | 93/93 | 1/1 | 20/20 |
第二周 | 305/398 | 1/2 | 20/38 |
第三周 | 328/651 | 2/4 | 25/60 |
第四周 | 1013/1689 | 1/5 | 30/90 |
第五周 | 795/2407 | 1/6 | 30/120 |