20162301 2016-2017-2 《程序设计与数据结构》第3周学习总结
教材学习内容总结
1.创建对象(new运算符);别名(多个引用变量可以指向同一个对象,因为对象变量不保存对象本身,保存的是对象的地址)
2.String类(字符串第一个字符的下标是0)
3.包(标准类库为Java API;import声明)
4.Random类
5.Math类
6.格式化输出(NumberFormat类 eg:getCurrencyInstance,getPercentInstance;DecimalFormat类;printf方法)
7.枚举类型(enum)
教材学习中的问题和解决过程
- 问题1:不理解书本P51程序3.2中
import java.util.Random;
的含义 解决方案:仔细阅读书本内容并查阅相关资料,明白了
import
声明列出了要在程序中使用的包及类(除java.lang包中的类自动使用)Random类属于java.util包。所以这段话的意思是,该程序使用在java.util中的Random类方法。- 问题2:不理解P54程序3.3中
Math.pow
等Math类的意思。 解决方案2:阅读有关Math类的博客,得到以下结论。
结果 | 方法 |
---|---|
乘方 | Math.Pow() |
开方 | Math.Sqrt() |
e的次方 | Math.Exp() |
绝对值 | Math.Abs() |
对数 | Math.Log() |
π | Math.PI |
e | Math.E |
- 问题3:上周printf方法了解的不彻底,导致书本上P57的知识看不懂。
- 解决方案:读了刘伟康同学上周的博客,也找了一些有关printf介绍的文章,使了解更进一步。
方法 | 表示 |
---|---|
%c | 单个字符 |
%d | 十进制整数 |
%f | 十进制浮点数 |
%o | 八进制数 |
%e | 计算机科学计数法表示的十进制数 |
%s | 字符串 |
%x | 十六进制数 |
%% | 输出百分号% |
- 问题4:书本P57程序3.5中模拟字符串“0.###”,但圆面积的结果却为78.54,小数点后面只有两位?
解决方案:在询问同学后发现,书本PP56页中写道“使用这种模式不会打印出拖尾0
- 问题5:书本P48程序3.1中concat与“+”加号的区别?
解决方案:根据自己的判断以及上网查询有关问题得出结论:两者都可以将2个字符串拼接到一块,。但是“ +” 还可以将字符串与非字符串(比如数字),拼接在一起,成为字符串。
- 问题6:看不懂书本3.7枚举类型
解决方案:java enum(枚举)的使用(还是有点一知半解,还需要时间去深入了解)
代码调试中的问题和解决过程
- 问题1:如何运行bin中的代码
- 解决方案:除了平时常用的
cd bin/
java xxx
来运行,老师建议用java -cp bin xxx
- 问题2:在虚拟机中下载并安装JDK
- 解决方案:将电脑中下载完的jdk压缩包发送到自己的邮箱中,然后在虚拟机里打开自己的邮箱,将压缩包下载下来。通过娄老师所写的安装指导了解到
mkdir ~/jdk
使用tar -xzvf jdk-8u121-linux-x64.tar.gz; mv jdk-8u121 ~/jdk
进行解压,顺利在虚拟机里下载了JDK。 问题3:完成PP3_1时出现以下两种问题
解决方案:
String1 = surname.charAt (0)
前加上char
,删除String
中的string1
。
代码托管
代码提交过程截图:
代码量截图:
上周考试错题总结
- 错题1:填空:Linux Bash中,(grep )命令可以进行全文检索。
- 原因:没有记住进行全文检索的命令为grep。我所写的答案是od命令,实际上od命令是查看特殊格式的文件内容。通过指定该命令的不同选项可以以十进制、八进制、十六进制和ASCII码来显示文件。
- 错题2:填空:Java程序开发中遇到的逻辑错误,命令行中要用(JDB)进行调试。
- 错题3:填空:Java中的字符‘a’的长度是(2)个字节。
原因:对字节字符方面知识存在漏洞。Java中一个字节为8个Byte,一个字符为2个字节。所以字符’a’的长度是2个字节。
- 错题4:判断:Java中赋值需要类型相匹配,所以byte i = 3; int j =2; j=i;中的赋值是无法通过编译的。(X)
原因:将byte转化为int是加宽转换,使用的是相等或更大的内存空间,通常不会丢失任何信息。(转换为浮点数的加宽转换可能会损失精度,但这道题不涉及这个问题)。反之如果是缩窄转换,使用的是更小的空间来存储数值,可能会丢失信息。
- 错题5:填空:~0b1011的十进制值是(-12)
原因:当时不知道“~”为运算符,“ob”表二进制。
- 错题6:填空 :0x10%8 的结果是(0 )
原因:0x代表的是十六进制,0x10=16,16%8=0
- 错题7: 判断:byte a=3;byte b=4; 那么 a+b的类型也是byte.(X)
原因:byte, short, char 这些整数类型,只要+ - * / % , 等式右边就会变为 int 类型。
- 错题8:填空:System.out.println(52+25+“”);的结果是(77)
原因:判断运算符“+”是加法还是字符串连接。这题中是单纯的加法运算。(双引号在数字的后面)
- 错题9:判断:System.out.printf("%b", 11)的输出结果是0b1011 (X)
原因:我在网上有看到说:“在c/c+ +里面所有整数非0视为true,0视为false但没有提到在java中。”后来娄老师在答疑论坛上回答了该问题。“c/c++中没有boolean类型,在c/c+ +里面所有整数非0视为true,0视为false。
在Java中,所有其他类型转为 boolean都会出语法错误,强制类型转换也不行。发现整数,小数,不论正负(包括0),只要在规定范围内,都输出true,而输入true也输出true,只有输入false才输出false,这样结论很清楚了,%b是boolean类型,类型正确时,true输出true,false输出false,类型不正确时都输出true。 ”
其他(感悟、思考等,可选)
这周学习了书本第三章的内容,明显感觉到了难度在上升,刚开始看书本都是一点都看不懂的程度。这章的内容丰富,书本里举得例子也很多。要想看明白书中所给的代码究竟是什么意思,就必须再深入研究所给类别中的具体方法。虽然现在书中的内容大致看明白了,但是写作业时却又难以下手。后来,我看了几位同学的码云(都写得非常非常好),跟着他们所写的代码,理解题目所要求的内容,然后自己试着再在虚拟机中尝试一遍。虽然是自己编写的,但总有一种看了答案后做题的感觉。我知道这种做法并不是很好,所以要给自己定个小目标:下周开始独立完成课后作业,不到万不得已不看别人的码云(这个小目标应该比一个亿好实现...)。这周的考试错了很多题,我看大部分的问题都出现在概念上。随着考试的增加,知识上各方面的漏洞也体现了出来。上周光顾着复习书本表面的知识,缺少了自己的思考。在这里要反思一下,以后要在各方面学习中注意自己的思考和总结。You can hold on to what other people can't hold on to,and you can have what others can't!共勉!
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 57/57 | 1/1 | 24/24 | |
第二周 | 338/395 | 1/2 | 18/42 | |
第三周 | 497/892 | 1/3 | 18/60 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
计划学习时间:15小时
实际学习时间:18小时
改进情况:多多尝试动手实践,减少对外在帮助的依赖。试试让自己独立完成课后程序的编译,即使错误很多次,花费了更多的时间,但是同时也会收获的更多。
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)