20172310 2017-2018-2 《程序设计与数据结构》第五周学习总结
20172310 《程序设计与数据结构》第五周学习总结
教材学习内容总结
总的来说,五、六两章主要是学习了条件判断和循环
- 条件语句和循环语句可以改变语句执行顺序(控制流)
- 相等性运算符有:
== (等于) !=(不等于) <(小于) >(大于)<=(小于等于)>=(大于等于)
关系运算符(也就是逻辑关系):! (非)&&(与) ||(或)
- 条件判断语句主要有if语句、if-else语句(第五章)和switch语句(第六章)
if语句、if-else语句的产生都基于布尔表达式,switch语句隐含的布尔条件则是基于相等性 - 除了条件判断语句条件运算符也可用来判断,但它是一个三元运算符,不是语句,最后返回值时要将其赋给一个变量
- 语句块的使用是必要的,它是由“{ }”括起来的多条语句的集合
- 数据比较:1.浮点数比较:比较浮点数的精确值时,等号运算很有可能达不到想要的效果,因为只有两个浮点数二进制位数都相等时才会被认为是真,所以判定相等最好是设置一个标准误差
2.字符比较:字符(char)和字符串(string)是两种不同的类型,字符的比较是基于Unicode字符集进行的
3.比较对象:(name1 == name2)
是可以的,但是它判断的是它们引用的是否是同一个字符串对象,而(name1.equals(name2))
是判断字符串对象是否含有相同的字符,这是不一样的。 - 循环语句主要有:while语句(第五章)、do语句和for语句(第六章)
三者在功能上相当,选择什么类型的语句取决于实际 - 条件语句和循环语句都可以进行嵌套
- 迭代器主要是用来处理某个集合,每一个迭代器对象都有一个可以返回布尔值的
hasNext
方法
这就是我对五六章内容的一个小结
教材学习中的问题和解决过程
- 问题1:主要是迭代器和ArrayList类比较难以理解
- 问题1解决方案:课本对于它们的用途都进行了一些解释。
迭代器是一个对象,可以用来处理一组相关的元素。
ArrayList类是使用一个称为数组的程序设计构建来管理列表。
在网上我查找了一下数组到底是什么,这是一篇比较详细的资料1
ArrayList类<元素>是用来管理该元素类型对象的列表,一点创建了这个对象,这个元素的类型就确定了。
其实我认为教材其实编写的很详细,如果看过课本教材上的例题大都是能够看懂的,真正难的问题是如何用所学到的知识自己去编写一个能够达到一定目的的代码,这点才是我因该努力去学习和多加练习的。
代码调试中的问题和解决过程
- 问题1:在编写pp5.3时,遇见了一个问题,我需要的是统计一串数字中奇数、偶数和0的个数分别是多少,可是编写出来的代码中,0总是被记录在偶数中,而0的总数永远是0。
我不知道这是为什么,于是我问了学长。
- 问题1解决方案:
index.charAt(count)
得到的返回值是一个char型的数值,并不是我认为的int型,所以一直得不到正确的结果。下面是一些关于char型的知识点
1、JAVA中,char占2字节,16位。可在存放汉字
2、char赋值
char a='a'; //任意单个字符,加单引号。
char a='中';//任意单个中文字,加单引号。
char a=111;//整数。0~65535。十进制、八进制、十六进制均可。输出字符编码表中对应的字符。
注:只能放单个字符。
3、char运算
char类型是可以运算的因为char在ASCII等字符编码表中有对应的数值。
在JAVA中,对char类型字符运行时,直接当做ASCII表对应的整数来对待。
示例:
char m='a'; ——a。
char m='a'+'b'; ——Ã。 //char类型相加,提升为int类型,输出对应的字符。注,在CMD.exe用输出结果是问题?,不同的编码输出显示不一样。Eclipse中须改成UTF-8。
int m='a'+'b'; ——195。//195没有超出int范围,直接输出195。
char m='a'+b; ——报错。//因为b是一个赋值的变量。
char m=197; ——Ã。 //输出字符编码表中对应的字符。
char m='197; ——报错。//因为有单引号,表示是字符,只允许放单个字符。
char m='a'+1; ——b。//提升为int,计算结果98对应的字符是b。
char m='中'+'国'; ——42282。
char m='中'+'国'+'国'+'国'; ——报错。int转char有损失。因为结果已经超出char类型的范围。
int m='中'+'国'+'国'+'国'; ——86820
char m='中'+1; ——丮。//1是int,结果提升为int,输出对应的字符。
char m='中'+"国"; ——报错。String无法转换为char。
System.out.println('中'+"国"); ——中国。//没有变量附值的过程。String与任何字符用“+”相连,转换为String。
char类型对应的是ASCII码字符集,所以要把它变成一个整型值才能完成。
我试了一种方法:
这种是将A所存放的char型在ASCII码表中对应的值变成整型值,而不是直接把这个数字变成整型值,这样得到的结果和原来是一样的
于是我尝试了另一种方法,这里是参考2
这样就得到了:
-
问题2:在编写代码时出现了该输入时程序却自动结束了的情况
-
问题2解决方案:这个问题我去问了一下老师,老师点出NextInt()输入值之后还有一个回车符,而下一个NextLine就直接读了那个回车符,所以没有输入就结束了,这时才突然想起来老师之前提到过这件事
因为之前没遇到过,所以原谅我已经忘记了。
最简单直接的办法就是再加一行another = scan.nextLine();
,这样上一个语句就读走了那个回车符,接下来就是用户输入。 -
问题3:pp6_6编码时判断总是错误的
-
问题三的解决方案:因为在Coin中他的flip方法是void型的,所以一直找不准相应的类型的数据和他匹配,于是自己又定义了一个Coin对象,然后再use
isHead()
方法,但是这样判断两者的值一直都是不相等的,可实际上有出现正面朝上的情况,后来发现if后面的()中不一定要有运算符。
代码托管
上周考试错题总结
-
错题1及原因,理解情况
The relationship between a class and an object is best described as
A .classes are instances of objects
B .objects are instances of classes
C .objects and classes are the same thing
D .classes are programs while objects are variables
E .objects are the instance data of classes
正确答案:D
解析:D是指是指对象是类的实例数据,B是对象是类的实例,主要是理解错了句子的意思 -
错题2及原因,理解情况
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
答案:D
解析:这道题其实选择是对的,老师后来修改了答案。使用了void返回值类型,这个方法将会被转为常规方法,不再是构造函数,这时,这个类会有一个默认的构造函数。所以不会出现错误。 -
错题3及原因,理解情况
Consider a method defined with the header: public void doublefoo(double x). Which of the following method calls is legal?
A .doublefoo(0);
B .doublefoo(0.555);
C .doublefoo(0.1 + 0.2);
D .doublefoo(0.1, 0.2);
E .all of the above are legal except for D
正确答案: E 你的答案: B
解析:看到这道题的时候我觉得A是一个整型值,所以不是很正确选项,以为题目出了bug,后来一看解析才恍然大悟:在A的情况下,值0(整数)被扩展为double。 -
错题4及原因,理解情况
Java methods can return more than one item if they are modified with the reserved word continue, as in public continue int foo( ) { ... }
(Java方法可以返回不止一个条目,如果它们被保留的单词继续修改,就像在公共继续int foo()中一样)
解析:看着这句话,一直都没怎么理解,这是有道翻译惹的祸,正确的理解应该是“如果使用保留字continue进行修改,Java方法可以返回多个项,如在public continue int foo(){…}”。所有的Java方法都返回一个对象,不论是一个原始数据类型,还是void,保留字continue用于退出循环的其余部分并再次测试该条件,所以continue并不会修改什么,而只是不断重复。 -
错题5及原因,理解情况
Inheritance through an extended (derived) class supports which of the following concepts?:通过扩展(派生的)类的继承支持下列概念中的哪一种?
A .interfaces
B .modulary
C .information hiding
D .code reuse
E .correctness
正确答案: D 你的答案: A
解析:代码重用是通过延长一个类并继承它,新类不必重新实现任何继承的方法或实例数据。 -
错题6及原因,理解情况
Interface classes cannot be extended but classes that implement interfaces can be extended.:
接口类不能被扩展,但是实现接口的类可以扩展。
A .true
B .false
正确答案: B 你的答案: A
解析:任何类都可以被扩展,无论它是一个接口,还是实现一个接口,或者两者都没有。唯一的例外是,如果该类被显式地用“final”这个词进行修饰,在这种情况下,它不能被扩展。
其他(感悟、思考等,可选)
条件语句和循环语句在编程中出现的实在是很多,上周的学习因为看不懂这些类型的语句而遇到了不少的麻烦,所以能够掌握五六章的内容是很重要的。随着学习的深入,在做课后题时所花费的精力越多,也可以说是脑子要懂的越多。去看别人编写的代码也会发现完成同样的操作,方法其实有很多,所以看看别人编写的代码也是有一定好处的,可以看到自己的不足,吸收别人好的想法。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 127/127 | 1/1 | 25/25 | |
第二周 | 278/405 | 1/2 | 20/45 | |
第三周 | 442/847 | 1/3 | 20/65 | |
第四周 | 1063/1910 | 2/5 | 30/95 | |
第五周 | 840/2750 | 1/6 | 27/122 |
-
计划学习时间:30小时
-
实际学习时间:27小时