20172332 《程序设计与数据结构》第三周学习总结
学号20172332 2017-2018-2 《程序设计与数据结构》第三周学习总结
教材学习内容总结
- 1.创建对象,对象引用变量的声明和与初始化,别名。
- 2.无比重要的String类!!!
- 3.包的概念。
- 4.import声明的作用。
- 5.新的一个类:Random类。
- 6.与数学息息相关的Math类。
- 7.格式化信息的两类:NumberFormat类和DecimalFormat类。
- 8.避免使用的printf方法。
- 9.特殊的类:枚举型。
- 10.要求使用对象的场合,为了满足对象类型要求而用包装器类创建
教材学习中的问题和解决过程
-
问题1:例3.1中,语句是mutation4 = mutation3.substring(3,30);,但是输出结果是:Mutation #3:CHANGX IS INXVITABLX, XXCXPT FROM VXNDING MACHINXS.
Mutation #4:NGX IS INXVITABLX, XXCXPT F ,相当于是(4,30) -
问题1解决方案:mutation4 = mutation3.substring(3,30)这句话的意思是,返回字符串中从索引3开始,到索引(30-1)处的子串。字符串的第一个字符的索引是0,以此类推,所以此问题中的(3,30)正好是NGX IS INXVITABLX, XXCXPT F。
-
问题2:例3.2中,
三个的区别。 -
问题2解决方案:若是nextInt:1.()表明返回一个整型随机数,在int型的取值区间取出一个数,包括正、负值;2.(10)则表明返回一个整型随机数,在0(10-1)的取值区间取出一个整数;3.**(10)+1**则表明返回一个整形随机数,在(0+1)10的取值区间取出一个整数。若是nextFloat:1.()表明返回一个分布在[0.0,1.0)区间的浮点随机数;2.(5)这种情况是错误的;
3.()乘6这种情况则表明返回一个分布在[0.06,1.06)区间的浮点随机数,除法也是同理。 -
问题3:SR3.22中,为什么答案是System.out.println(Math.sin(1.23)),而不用把static double也打上。
-
问题3解决方案:因为Math类的所有方法都是静态方法,用的时候可以只输入类名称调用,所以图3.5中的所有方法在编程的时候只需要输入从第三个单词(包括第三个单词)之后的内容。
-
问题4:SR3.13中不知道Point类属于哪个包,所以在线Java API文档不知道怎么找。
-
问题4解决方案:在线Java API文档的最上面有一栏这个
,
点击索引,可以根据类名的首字母查找。 -
问题5:
例3.4的运行结果我的是人民币符号,书上是美元符号。 -
问题5解决方案:装虚拟机时,会选择地点,然后货币符号根据地点而定,比如我选的上海,则就会是人民币的符号,而我如果选择的是美国,则会是美元符号。如果想要修改成$符号,先声明一下import java.util.Locale;再
把那一行代码改成:NumberFormat fmt1=NumberFormat.getCurrencyInstance(Locale.US );
-
问题6:例3.5中的Math.PI是什么意思。
-
问题6解决方案: 比任何其他值都更接近 pi(即圆的周长与直径之比)的 double 值。也就是说PI就是数学中的π。
-
问题7:
结果的区别。 -
问题7解决方案:
可以明显看出,因为之前设置的格式规则是0.###,所以第一个结果都是四舍五入保留了三位小数,末尾若是0则不写,第二个结果没有设置格式规则,则显示了能显示出的一切小数。相比较来说,DecimalFormat类使数规范化。 -
问题8:例3.6中枚举型的
意义。 -
问题8解决方案:根据枚举型的ordinal()方法,我了解到ordinal就是序数,与之前的索引值一样,声明的变量取值,从第一个的序数开始依次为0、1、2……因此根据之前的代码可以知道这个程序的结果中的序数结果是怎么来的了,也知道这个是什么意思了。
代码调试中的问题和解决过程
- 问题1:
- 问题1解决方案:首先我进行了强制上传!
只不过还是不成功,然后尝试了百度的方法!
成功了!!!!!!!! - 问题2:题目说要保留四位小数。
但是末尾若是0的话,显示的位数会变少。 - 问题2解决方案:
这时需要把
改为。
####的话,超出位数限制,会四舍五入,若末尾是0则不显示;没有超出位数的话,只显示有数字的位数,不会用0补齐空缺的位数。
0000的话,超出位数限制,会四舍五入,若末尾是0会显示;没有超出位数的话,显示的时候除了原有数字,空缺的位数用0补齐。
代码托管
上周考试错题总结
1.Consider the following statement:System.out.println("1 big bad wolf\t8 the 3 little pigs\n4 dinner\r2night");This statement will output ________ lines of text (思考下面的语句,该语句将输出___行文本)
- A . 1
- B . 2
- C . 3
- D . 4
- E . 5
答案:B,我选的C。\t是制表符,是八个空格不换行,当时想成制表符要换行,=。=记得不清楚,也懒得翻书,导致出现了这么简单的错误。
2.Of the following types, which one cannot store a numeric value? (在下列数据类型中,哪一个不能存储一个数值型数据?)
- A . int
- B . byte
- C . float
- D . char
- E . all of these can store numeric values (以上所有类型都可以存储数值型数据)
答案:D,我选的E。当时在做题的时候,就在D与E之间徘徊,翻书看了字符型,只看见了因此可以表示128个不同的字符,其中包括:0~9,却没看见之前说的应注意一个数字作为一个字符(或一个字符串的组成部分)和作为一个数值(或一项大数值的组成部分)的差别这句话。简单的来说,可能看着都是相同的数字组成,但是数字的存储方式和字符的存储方式不一样。比如:602,这个数字是可以做运算的,但如果是“602ABC”则,6、0、2分别为一个字符,并且与组成字符串的其他字符一样。
3.What value will z have if we execute the following assignment statement? float z = 5 / 10; (如果我们执行下面的赋值语句,得到的z将会是什么值?)
- A . z will equal 0.0 (z将等于0.0)
- B . z will equal 0.5 (z将等于0.5)
- C . z will equal 5.0 (z将等于5.0)
- D . z will equal 0.05 (z将等于0.05)
- E . none of the above, a run-time error arises because z is a float and 5 / 10 is an int (以上都不对,因为z是float类型,5 / 10是int类型,所以会发生运行时错误)
答案:A,我选的E,这题我与之前的一个pp搞混了,那个pp中有一条语句是final double A=5.0/9.0而当时因为我输出final int A=5/9所以最后的答案结果是错误的,我就认为只要是分数都需要用小数去表示。但是经过了很多次的尝试之后,发现pp的那个结果错了是因为final int A=5/9的答案是0,并不是5/9,所以这道题类似,5/10整型数的除法,答案应该是0,之后再转换为浮点数变成0.0。
4.A cast is required in which of the following situations? (下列哪种情况需要强制转换?)
- A . using charAt to take an element of a String and store it in a char (使用charAt来获取字符串元素并将其存储为char类型)
- B . storing an int in a float (将一个int类型的数存储为float类型)
- C . storing a float in a double (将一个float类型的数存储为double类型)
- D . storing a float in an int (将一个float类型的数存储为int类型)
- E . all of the above require casts (以上所有情况都需要强制转换)
答案:B,我选的E。这道题的话只需要记住小化大无限制;大化小需强制;大化小、小化大都可以强制。
5.If x is an int and y is a float, all of the following are legal except which assignment statement? (如果x是一个int类型的数,y是一个float类型的数,下面所有赋值语句中哪个不合法?)
- A . y = x;
- B . x = y;
- C . y = (float) x;
- D . x = (int) y;
- E . all of the above are legal (以上全部合法)
答案:B,我选的E。这题与上题一。A是小化大无限制。B是大化小需强制,但是并没有强制转化所以不合法。C和D都是强制转化,大化小,小化大都可以强制。
6.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);的输出是什么?)
- A . 15
- B . 105
- C . 10 5
- D . x+y
- E . An error since neither x nor y is a String (因x和y都不是字符串而引起的一个错误)
答案:B,我选的A。我觉得有以下几种情况:①("X+Y"),这种情况输出为X+Y②("X"+Y)或者("Y"+X),输出则为X5或者Y10③(""+X+Y),输出则为105。要想输出x+y的结果15,必须在之前把表达式写出,比如加上一条Z=X+Y;的语句,把输出改为(""+Z)则可以输出A选项。
7.If you want to store into the String name the value "George Bush", you would do which statement? (如果你想把"George Bush"这个值存储为字符串类型的名字,你会执行那条语句?)
- A . String name = "George Bush";
- B . String name = new String("George Bush");
- C . String name = "George" + " " + "Bush";
- D . String name = new String("George" + " " + "Bush");
- E . Any of the above would work (上述都可以完成)
答案:E,我选的A。这道题在学了第三章后,有更深刻的理解。A答案只是使用最多,最方便的一种。但是其余的语句并不能说不对,只是可能不常用。
8.Java is a strongly typed language. What is meant by "strongly typed"? (Java是一种强类型语言。“强类型”指的是什么?)
- A . Every variable must have an associated type before you can use it (在使用变量之前,每个变量一定都有一个与之关联的类型)
- B . Variables can be used without declaring their type (变量可以在不声明其类型的情况下使用)
- C . Every variable has a single type associated with it throughout its existence in the program, and the variable can only store values of that type (在程序中,每个变量都有一个与之关联的类型,而变量只能存储该类型的值)
- D . Variables are allowed to change type during their existence in the program as long as the value it currently stores is of the type it is currently declared to be (变量存在于程序中时允许改变类型,只要它当前存储的值是当前声明的类型)
- E . Variables are allowed to change types during their existence in the program but only if the change is to a narrower type (变量存在于程序中时允许改变类型,但只能缩窄转换)
答案:C,我选的A。解析:强类型是一种编程语言的属性,在变量存在时,变量的类型不改变,存储在该变量中的任何值都是该类型的。强类型之所以重要,是因为它保证成功编译的程序不会出现与声明变量相关的类型错误的运行时错误。自己的理解就是,举个例子,你可以声明int A,也可以是float A,在int A中,A就是整型数,只能储存整型数类型,并不会改变。而在float A 中,A就是浮点数,只能存储浮点数类型。只有先声明了,才能确定与变量关联的类型。
其他(感悟、思考等,可选)
这星期在教材学习中遇到的问题比较多,并且好多例题中的语句看不明白并且在书本上是找不到答案的。但是通过查找相关资料,或者询问老师,学长,或者自己亲手去实验一下,都会摸索出问题的答案。并且我觉得,书上的例题并不是按照书上敲下来就一点问题都没有,需要自己去使用,有的时候代码和书上一模一样,但是结果真的与书上不一样,这就需要自己去寻找原因,并不是就忽略过去。可能是因为这章pp中需要用到的语句,大部分书上都有,所以代码调试中遇到的问题比较少。这章中讲的类比较多,有些在pp中并没有使用到,可能以后遇到需要使用的时候想不到,所以我觉得还是应该多看看教材,搞清楚什么样的情况需要使用什么样的类。此外这章最后的包装器类,暂时还不能理解的很清楚,需要后续的学习去加深理解。此外通过这次的考试,我认为自己对概念类的东西很模糊,只有通过之后的学习和实践,才能逐渐理解。同时,也发现了上周中有些问题的理解是不对的。我觉得光看书有些东西是没有办法理解的,通过考试就会发现自己看的书非常的表明浅显,真的需要多动手,去敲代码,才能加深理解和记忆。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 182/182 | 1/1 | 10/10 | |
第二周 | 458/640 | 1/2 | 15/25 | |
第三周 | 469/1109 | 2/4 | 18/43 | 学会IDEA的使用和调试,学会jdb调试。 |
-
计划学习时间:20小时
-
实际学习时间:18小时
-
改进情况:这星期的代码量与上星期差距不大,因有实验,博客量增加了一篇,并且花费了更多时间去学习,但仍没达到计划学习时间。