20172314 2017-2018-2 《程序设计与数据结构》 第三周学习总结
教材学习内容总结
- 学到了变量的声明与初始化,例如
String xxx;
声明了一个变量名为xxx的类String的变量;null表示初始化引用为空;同时,String类是java.lang包的一部分,会自动导入到java程序中,每当出现字符串常量时会自动建立String对象,无需使用new运算符。 - 对于别名,多个引用变量可以引用同一对象,当利用一个引用改变其所指的对象时,同时也使作为别名的所有引用指向的对象发生了改变。
- import声明为编写java程序时,使用非java.lang包中的类时的引用。使用了import声明之后,在程序中使用类时,不必每一次引用都写出完整的包名类名,而可以省略包名,只写类名。
- Random类用来产生随机数,Math类提供了计算的基本数学函数,NumberFormat类和DecimalFormat类用于格式化信息。
- Printf方法,使系统的移植更容易,支持遗留系统的移植。
教材学习中的问题和解决过程
-
问题1:教材SR3.6的c项,s1,s2,s3的初始值分别是Amanda、Bobby、Chris,则
System.out.println(s2.replace('B', 'M');
改变了哪些变量?解决:我认为改变了s2,由Boddy变成了Mobby,但答案是没有改变变量。我觉得就应该改变的,与书上的例题使用方法一样,所以我就搞不明白为什么了。
-
问题2: 课本例3.1中
Mutation #3: CHANGX IS INXVITABLX, XXCXPT FROM VXNDING MACHINXS
mutation4 = mutation3.substring(3, 30);
输出的Mutation4为:
Mutation #4: NGX IS INXVITABLX, XXCXPT F
不明白为什么,我数了好多次,都对不上。
解决:字符的索引从0开始,(3, 30)表示从第四个字符到第29个字符,之前搞不明白的原因是忘记从0开始,数第29个字符时从1开始数的...
代码调试中的问题和解决过程
-
问题1:在做pp3.3时,我的程序如图,
多次运行后得到的前三位随机数总是只有两位,
但是在最后的num1前加上一段字符串“Tel”后,就可以输出三位数了。
解决:我觉得前面加不加字符串是没有影响的,我也没有找到有关这样的规定,但我试验多次都是两位,
难道是碰巧实验的几次第一个数都是零省略了?我觉得不会有那么巧。但它就是这样子 ̄へ ̄ -
问题2:在做pp3.8时,显示错误如图,
但我不明白为什么。
解决:括号中不应该有String.in
,那是针对Scanner类的,表示标准输入流,而在Random类中不用。 -
问题3:
public class Test {
public static void main(String [] args) {
int x = 5;
int y = 2;
int a=5,b=4,c=3;
System.out.println(x+y+"K");
System.out.println("abc"+a+b+c+3); }
}
结果是: 7K ; abc5433
解决:第一个输出x+y+"K" :从左到右先计算x+y,结果为7是int类型,这里的"+"号是计算符号,而后“+”号是当字符串连接符号处理所以最后int的7和string类型的“K”连接后生成新的string,“7K”
第二个输出“abc”+a+b+c+3 :也是从左到右计算,因为“abc”是字符串,而后跟“+”号是当字符串连接符号处理,所以是“abc5433” ,其后的“+”号都当成了字符串连接符号 。
总之,当“+”号前后有字符串出现时,就当做字符串连接符号处理了
代码托管
上周考试错题总结
-
错题一:Of the following types, which one cannot store a numeric value? (在下列数据类型中,哪一个不能存储一个数值型数据?)char
分析:整数和字节用于存储整数(整数)和浮点数,用于存储一个实数或浮点值(带有小数点的值)。char存储一个字符,包括字母、标点符号和数字。但是,存储数字“5”与存储数字5不一样。 -
错题二:Which of the following is true regarding the mod operator, %? (关于求余运算符%,下面哪项是正确的?) It can be performed on any numeric values, and the result always is numeric (它可以执行任何类型的数值,其结果始终是数值)
分析:在看到这道题目时,由于我只见过整数进行求余运算,便觉得应该是只执行Int类的,并且结果也是Int类的。但实际上,他在大多数情况下是用于Int类的计算,但它是可以执行任何类型的数值。 -
错题三:Assume that x, y, and z are all integers (int) equal to 50, 20, and 6 respectively. What is the result of x / y / z? (假设x、y和z都是整型数(int),分别等于50、20和6。那么x / y / z的结果是什么?) 0
分析:这道题我知道计算结果是0,但我选择的是A run-time error because this is a division by 0 (由于除0产生的运行时错误),这道题的运算顺序是从左到右,50/20=2, 2/6=0;其中没有除0,错的原因是做题不认真。 -
错题四:What is output with the statement System.out.println(x+y); if x and y are int values where x=10 and y=5? (如果x和y是int类型的数值,x=10,y=5,那么语句System.out.println(x+y);的输出是什么?)15
分析:我认为答案是输出105,但是后来得知,这里没有“”,所以x+y被当做字符串来输出,就是输出x+y的值15;如果是输出105的话,()中须有“”这样+会被当做字符串连接。 -
错题五:If you want to store into the String name the value "George Bush", you would do which statement? (如果你想把"George Bush"这个值存储为字符串类型的名字,你会执行那条语句?)String name = "George Bush"; String name = new String("George Bush"); String name = "George" + " " + "Bush"; String name = new String("George" + " " + "Bush");均可
分析:首先String类可以省略new运算符,故前两者均可,其次使用连接符是等同的,并没有产生差别。 -
错题六:You cannot cast a String to be a char and you cannot cast a String which stores a number to be an int, float or double. (你不能将字符串强制转换为char类型,也不能将一个字符串强制转换为int、float或double类型。) true
分析:没有任何机制可以将字符串转换为原始类型之一,但是有一些方法可以执行类似的操作,并在给定的位置(charAt)返回一个字符,或者返回int、float或double值,该值等价于存储在字符串中的数字。 -
其他:The values of (double) 5 / 2 and (double) (5 / 2) are identical. ((double) 5 / 2和(double) (5 / 2)的值是相同的。) false
分析:前者先将5变为double型即5.0,然后除2,结果为2.5;后者先5/2,因为5和2都是Int型,结果为2,将其换为double型即为2.0,所以两者答案不同。
其他
这周在代码的编译运行方面没有什么较大的问题,还有就是自己的代码量太少,平时需要多下功夫。我感觉我还是没有很透彻的理解一些基础概念,有点混乱,模模糊糊的理解,有些地方不知道为什么要加一些东西,有些地方又不用。平时看代码的话,看着容易理解,但是合上书自己就什么也不知道了...(▼ヘ▼#)。然后还有我发现我总是在一些找不到答案的问题上有问题,比如上述的种种...代码调试的第二个问题好不容易在网上找到解答,他却是这样说的
哪些不需要哪些需要。。。。真是不好回答你啊,人家构造方法需要的你就给呗,类是模板,是对你所要操作的东东的一种封装,现在你可能有点难以理解,你就照着书上的写类,会用就可以了,以后会理解的
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 |
第一周 | 93/93 | 1/1 | 20/20 |
第二周 | 305/398 | 1/1 | 20/38 |
第三周 | 328/651 | 1/1 | 25/38 |