20165202 2017-2018-2 《程序设计与数据结构》第2周学习总结#
教材学习内容总结
Ch2###
- Java基本数据类型包括boolean、byte、short、char、int、long、float、double
逻辑类型:boolean,赋值只能使用true和false,不可使用0和1;
- 类型转换运算:精度由低到高排序:byte、short、char、int、long、float、double
(类型名)要转换的值
当超过变量范围时将导致精度的损失。
- 关于Scanner 类使用:
必须在代码开头输入import java.util.Scanner;
新建 Scanner 变量:```Scanner xxx = new Scanner(System.in);``
数组名.length
可得知数组中元素个数
- 数组为引用型变量,声明数组和创建数组可以一起进行
float boy[] = new float[4];
System.out.println(""+a)
输出char型数组的引用。
Ch3###
- Java允许把不超出byte、short和char的取值范围的算术表达式的值赋给byte、short和char型变量。
- 位运算符计算规则与上学期HDL的按位运算相仿。
- (新概念)instanceof运算符:左面的操作元是一个对象,右面的是一个类,当左面的对象是右面的类或子类创建的对象是,运算结果为true,否则为false。
- 2-6节关于控制语句的内容介绍与C语言相同。
- 遍历数组:for(声明循环变量:数组的名字)
教材学习中的问题和解决过程
- 问题1:对于新的Scanner 类不太理解
- 问题1解决方案:结合Example2_3、2_5 、3_9,使用
Scanner xxx = new Scanner(System.in);
,等待键盘输入后调用reader.nextXXX()
方法获取输入数据。
- 问题2:P22例子2
byte b = (byte)(-129);```
结果为a=-128,b=127,我不太理解运算过程
- 问题2解决方案:我百度了一下,参考[作业帮解答](https://www.zybang.com/question/ff08650895c5d44819c4734f2b3050d9.html)
Java中正数用源码表示,负数用补码表示,第一位是符号位。
所以对于128和-129,他们的编码分别是:
0000 0000 0000 0000 0000 0000 1000 0000
1111 1111 1111 1111 1111 1111 0111 1111。
对于a来说,1000 0000是负数(第一位为1),它的绝对值是1000 0000即128,
而对于b来说,0111 1111是正数,值为127。
##**代码调试中的问题和解决过程**
(本周练习书中代码问题较少,在了解vi及javac使用后,仅个别为编译误输入错误)
- 问题1:课本P20代码中'ぁ'字无法输入
- 问题1解决方案:参考蓝墨云班课中同学给出的解答,安装日文输入法,同时该字符有大小写问题:是这个ぁ,不是这个あ。
- 问题2:P32习题3(5)编译失败
![](https://images2018.cnblogs.com/blog/1297055/201803/1297055-20180311013018716-657603553.jpg)
- 问题2解决方案:```b[0][1] = b[1][3]```中缺少了“=”导致编译失败,有时一个小的定义错误可能会引发多行代码的问题。
![](https://images2018.cnblogs.com/blog/1297055/201803/1297055-20180311013042825-1204482505.jpg)
- 问题3:在bin、src两个目录下设ch目录方便查看不同章节代码,但不知道该如何进行编译
- 问题3解决方案:
```vi src/ch3/Example3_8.java```
```javac -d bin/ch3 src/ch3/Example3_8.java```
可直接操作
![](https://images2018.cnblogs.com/blog/1297055/201803/1297055-20180311013352760-1295373454.jpg)
- 问题4:Example2_1编译显示未结束的字符串
![](https://images2018.cnblogs.com/blog/1297055/201803/1297055-20180311113527498-1183869555.jpg)
- 问题4解决方案:
```System.out.println(position+"位置上的字符是:"+(char)position);```缺少最后面的“)”导致行8、10均出现错误
##[代码托管](https://gitee.com/BESTI-IS-JAVA-2018/20165202jhs)
![](https://images2018.cnblogs.com/blog/1297055/201803/1297055-20180311003119555-357939904.jpg)
## **上周考试错题总结**
参见补交博客《[20165202 第二周测试课下选做](http://www.cnblogs.com/jhs888/p/8537020.html)》
## **感悟与思考**
可以说周四的考试才是真正学习java的开始,在上周的学习中,我还只是简单的观看视频,把代码输入书中,以为自己掌握了所学内容。但在实际编程考试中,问题就暴露出来了:自己对于代码根本没有理解,一旦改变题目,立刻无从下手。直接导致了我在随堂测验两科都没有来得及提交,关于第一堂课老师讲的包的用法更是一知半解。所以,当天下课后我就把测试未完成的代码重新写完,并把相关内容用博客的形式补全。第一次测试改变了我的学习态度,我发现只有深入的理解与练习才是学习,本周我把所有例题代码及课后练习代码全部写了一遍,并且通过百度和问同学来理解代码含义,虽然之前的C语言学的很渣,但我相信兴趣是学习的动力,今天一天的代码量有些大,达到300多行,但是在看似枯燥的练习中我感觉自己的熟练度在提高。娄老师提到的将一周代码行数目标分散开,我认为很有道理,提前动手慢慢消化,一天完成两章内容的近400行确实较为疲惫。本周我还帮助同学重装了虚拟机,对移植VDI和ubuntu的配置、git命令的使用有了新的认识,遇到了许多问题并不断尝试解决他们。同时在敲代码的过程中,结合预备作业的vim使用学习以及Linux常用命令,我的编译速度精度都在提高,只有真正在写的过程中才会研究怎样提高效率、怎样解决问题。在完成一次次编译调试运行的过程中,最后能看到java xx的顺利运行也是一件很开心的事。娄老师所说的“做中学”我很赞成,但我更喜欢“乐中学”,如果一门学科能给你带来快乐,有了特殊的“动力”,源自热爱,学无止境!
## **学习进度条**
| | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|
| -------- | :----------------:|:----------------:|:---------------: |
| 目标 | 5000行 | 30篇 | 400小时 |
| 第一周 | 24/24 | 1/4 | 15/15 |
| 第二周 | 423/423 | 2/6 | 14/29 |