学号 20162320刘先润 《程序设计与数据结构》第3周学习总结
教材学习内容总结
- 1.关于String类,使用String可以创建任何对象,数字和英文字母,可以用来执行不同的方法得到结果,例如字符串的大小写
toLowerCase
和toUpperCase
、统计字符数length
、替换字符replace
。详情见书P47页的表格以及实例。 - 2.关于Random类,即一个(伪)随机数生成器,也是通过计算机内部的一系列计算生成的,在一定程度上是随机的。Random可以指定数的范围,可以将其运用于生活中的抽奖,模拟计算机产生不规则排列自然数等实际问题,详情见P51页的Random的方法。
- 3.关于Math类,学习了用于计算的一些基本数学函数,但是Math类没有返回一个整数的方法,所以一般用double来定义。
- 4.格式化输出,通俗说就是为了打印的美观性对数值格式化,分为
NumberFormat
和DecimalFormat
(注:decimal为十进制的意思),NumberFormat
可以返回货币格式和百分比格式对象,而DecimalFormat
则是可以设置不同的格式信息。 - 5.枚举类型,通过程序3.6的实例可以了解枚举是列出所有变量可能的取值,防止出现任意值,所以枚举的方法只适合较少的变量。
- 6.包装类,说实话这个知识点没有实例很诘屈聱牙,教材说包装类把基本类型数据转换为对象。通过举例:
Integer i=new Integer(1)
,我总结出所有包装类都可将与之对应的基本数据类型作为参数,来构造它们的实例。并且当Number包装类构造方法参数为String 类型时,字符串不能为null
。
教材学习中的问题和解决过程
- 1.问题:对于格式化输出的问题,在程序3.4中
impoet java.text.NumberFormat
到Numberformat fmt1 = NumberFormat.getCurrencyInstance()
;我感觉没有什么意义。 - 解决方案:通过自己做实验对比发现,在输出的时候在数值前面加上了单位$,但是我也可以直接省去前面的步骤直接自己加上单位,所以我觉得这个NumberFormat类单纯只是为了美观的话作用有些鸡肋,甚至很麻烦。
- 2.问题:什么是
null
引用? - 解决方案:null本义为“无效的”,书上P45页指出已经声明了一个String引用变量,而实际String对象不存在。null引用应该是不指向对象的引用,null为保留字,用来检查空引用,避免对空引用的访问。
- 3.问题:垃圾收集有什么用?就算对象没有用变成了垃圾为什么一定要处理呢?
- 解决方案:书上的解释是因为对象成为垃圾后不能再调用它的方法和变量,所以要处理。百度上解释为对程序中无任何引用的对象占据的内存空间进行释放的一种释放内存的方式,所以垃圾收集有一定的必要性。
代码调试中的问题和解决过程
- 1.问题:
为什么一定要用double给number3赋值? - 解决方案:书上没有指明,但是在P53的表格Math类的方法中却写着
static double pow (double num,double power)
,就暂且先当一个固定用法记住。 - 2.问题:做PP3.3编写前3位数字,题目要求前3位数字不能包含8和9,不会。
- 解决方案:暂时是用单独确定前三个数字,限定范围在0-7做的,还在研究中。
- 3.问题:我用虚拟机写的代码,在IDEA上按照步骤克隆学习项目,但是没有反应。
- 解决方案:待解决
代码托管
上周考试错题总结
- 错题1:Java程序开发出现逻辑错误,用(JDB)调试。 错因:JDB是基于文本和命令行的调试工具,这是老师在作业要求里面说的,我没记。
- 错题2:java关键字(final)声明变量。 错因:我填的是import,虽然import也是声明,但却是用来简化引用的,在P50页有提,而final是关键字,在P27页指出final是说明标识符是常量,此题的关键在于题目中“关键字”三字。
- 错题3:~0b1011的十进制是(-12) 错因:这个题真的不会,所以我记下了解题步骤。先补齐8位“00001011”,因为~为“取反”的意思,即“11110100”,然后再取反加一,即“ 0001011”,“10001100”所以等于“-12”。
- 错题4:
byte a=3;``byte b=7;
那么a+b类型是byte.(F) 错因:我认为a和b都是用byte定义的,a+b应该也是一样。但是a+b正确的类型应该是int,因为默认成int。 - 错题5:
System.out.println (52 + 25 + "")
结果为(77)。 错因:我填的是5225,因为书上的实例是加上括号后才会等于77,但是此题的变数在于52+25在引号前面,即成为了字符。 - 错题6:Java中, 数字2351l 的类型是 (int)。 错因:此题为陷阱题,最后的是“l”不是“1”,是个浮点数,非整数型。
- 错题7: Java中赋值需要类型相匹配,所以
byte i = 3;
int j =2;
j=i;中的赋值是无法通过编译的。(X) 错因:我当时认为int到byte是缩窄转换,不会成功。其实是int可以赋值给byte,因为就算超过byte上限,也不过是将数据截断而已。 - 错题8:0x10%8 的结果是(0)错因:不理解题目符号意思,0x表示十六进制,十六进制的10先化成二进制为00010000,再化成十进制得到16,16除以8等于2,余0,所以为0。
- 错题9:0x10&9 的结果是(0)错因:不理解&符号的意思,0x表示十六进制,十六进制的10先化成二进制为00010000,再化成十进制得到16,&符号是位与运算符号,16的二进制00010000,9的二进制00001001,我询问刘伟康,他说0&1是0,0&0是0,1&1是1,所以得出二进制结果00000000,化为十进制,即为0。
附:我觉得学到现在有一个很强烈的感受必须要说,就是写程序时有很多东西会做但是不懂,我感觉理论和实践有些脱节,像这些考试的错题,对于一些小题的细节掌控的不到位,我比较担心这个问题。虽然是做中学,但是最后总感觉做了很多,学了很多,但都是死记硬背,不像是真正学懂的样子。现在对于我来说错题的积累很重要,因为只有错得多才能真正牢记。
其他(感悟、思考等,可选)
感受:我现在对于理论概念有些疏忽,课后的习题我认为可以在一定程度上弥补这一缺陷,尤其是练习EX系列。先给自己定个小目标,一周500行代码任务稍微有点大,但是3周1000+行代码还是可以达到。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 180/180 | 1/4 | 15/15 | |
第二周 | 465/645 | 1/5 | 18/33 | 学习了scanner |
第三周 | 456/1101 | 1/6 | 17/ 50 | 学会了如何编写数学公式等 |
第四周 | 0/0 | 1/7 | 0/ 0 |
计划学习时间:15小时
实际学习时间:17小时