学号 20162320刘先润《程序设计与数据结构》第4周学习总结
教材学习内容总结
- 布尔达表达式,是一个用来判定取值为真或为假的条件。
- 两种运算符,在if语句中表示两个变量的关系,分为关系运算符和逻辑运算符。
运算符 | 含义 |
---|---|
== | 等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
! | 逻辑非 | !a | 如果a为假,则结果为真;如果a为真,则结果为假 |
&& | 逻辑与 | a && b | 如果a和b都为真,则结果为真;否则为假 |
|| | 逻辑或 | a||b; | 如果a或b两者都为真,则结果为真;否则为真 |
if
条件语句,在后面的括号内给定条件并判断是否执行赋值语句。if-else
语句则是根据条件的真假判断执行哪一条赋值语句。- 数据比较,浮点数比较计算差值的绝对值再比较公差,字符比较则是判定顺序关系,对象比较则是使用
int result = name1.compareTo(name2);
根据result的正负性判定。 - switch语句,switch即为选择,在switch后按照顺序执行语句,若处理过程中匹配到了表达式的值,则根据有无break来结束。
- while语句,是loop语句,while会根据条件重复地执行相同的语句,直到条件变假
- 迭代器,是一个对象,可以按项处理元素,还可以处理并打印URL的每个部分。
- do语句,是一种loop语句,与while不同在于do实在执行之后计算条件的值,所以在程序中do后面是不加括号的,而且do语句需要while来停止
- for语句,for语句循环的方式是从左至右的,分
初始化⇒布尔表达式⇒增量
三个过程。 - 数组元素,每个元素保存在数组确定且有标记的地方。(注:从0开始编号)
- 对象数组,用数组来保存对对象的引用。
- 数组的定义方法,分为静态定义法,例如
int arr [] = {9,5,3,7,1}
(注:中括号位置不固定),动态定义法int arr [] = new int[10]
(表示声明了十个数值)。若数组为二维数组,int arr [][]= {{1,2,3},{4,5,6},{7,8,9}};
和int arr [][] new int[3][3];
教材学习中的问题和解决过程
- 1.问题:在使用
if else
语句做实验时,为什么在else后面的第二个语句在非else情况下也能执行。
解决方案:通过做不同的if else实验时发现问题出在块语句的理解上,只有第一个语句才能作为else子句的内容,所以要用{}来限定范围。 - 2.问题:关于default的理解,教材上说如果没有default部分,switch语句就不会执行任何语句,而继续执行switch之后的语句,无法理解。
解决方案:编写程序加结合示例发现,default是在与前面所以的分支语句都无法匹配时执行。例如假设范围为1-10,前面有三个语句分别代表1-2,2-3,3-5,当无法匹配时,执行default:后面的内容,相当于deafult以一种形式补全了剩余的5-10的范围,防止运行错误。 - 3.问题:关于
String another = "y";
while (another.equalsIgnoreCasr("y"))
,这句话通常应用于程序中询问用户是否继续执行,这种方法在教材中通常提示输入n来否定,其实我只要输入非y字符就能返回假,这算不算教材上的程序设计的小失误呢? - 4.问题:
import java.io.*;
和import java.util.*
的区别,这两个不都是导入这个包下的所有类库吗?
解决方案:我的理解是导入了不同的东西,前者是文件、数据流输入输出相关,后者是基础类(并不一定正确)。
代码调试中的问题和解决过程
- 1.问题:
为什么在前一个不加break的语句后不比较"case c"而直接执行这个语句呢,按理说打印出来应该只是"a"才对啊?
解决方案:教材上的解答是如果没有break语句,继续执行switch之后的语句。并未给出详细原因,暂且当成一条没有break后不比较直接执行的定义来牢记吧。 - 2.问题:在program4.10中do后面循环的计算中number是整数型,
number = number/10;
有些数执行后number不就变成小数型了吗?
解决方案:通过赋各种值发现当number/10成为小数时则强制整数,即为去掉点后的部分,但并非四舍五入,比如1.6就取为1,0.9取为0。 - 3.问题:
这上面int:value
实在是看不懂是什么意思,我觉得跳跃学习漏学了知识点。
解决方案:通过结合后面的实例反复理解,相当于让value等于list,使后面的打印出对应的数组list内容。
- 4.问题:
代码托管
(statistics.sh脚本的运行结果截图)
结对及互评
评分标准(满分10分)
- 正确使用Markdown语法(加1分):
- 不使用Markdown不加分
- 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
- 排版混乱的不加分
- 模板中的要素齐全(加1分)
- 缺少“教材学习中的问题和解决过程”的不加分
- 缺少“代码调试中的问题和解决过程”的不加分
- 代码托管不能打开的不加分
- 缺少“结对及互评”的不能打开的不加分
- 缺少“上周考试错题总结”的不能加分
- 缺少“进度条”的不能加分
- 缺少“参考资料”的不能加分
教材学习中的问题和解决过程, 一个问题加1分
代码调试中的问题和解决过程, 一个问题加1分
- 本周有效代码超过300分行的(加2分)
- 一周提交次数少于20次的不加分
6 其他加分:
- 周五前发博客的加1分
- 感想,体会不假大空的加1分
- 排版精美的加一分
- 进度条中记录学习时间与改进情况的加1分
- 有动手写新代码的加1分
- 课后选择题有验证的加1分
- 代码Commit Message规范的加1分
- 错题学习深入的加1分
7 扣分:
- 有抄袭的扣至0分
- 代码作弊的扣至0分
点评模板:
基于评分标准,我给本博客打分:(0-10)。得分情况如下:xxx
点评过的同学博客和代码
上周考试错题总结
- 错题1:使用JDB进行调试时查看源代码的命令是(list)。错因:没有去看这个知识点,每次对这种偏概念性质的题我都很难做对,基本功不太好。
- 错题2:10&9 的结果是(8)。错因:此题和上周的接近相同,我就直接背了个答案。解法:10转化为二进制是00001010,9转化为二进制是00001001,&符号是位与运算符号,0&1是0,0&0是0,1&1是1,所以为00001000,转化为十进制为8。
- 错题3:Java程序中使用java.lang包中的类,应该使用import java.lang.来导入。(X)错因:把当成可以使用任何库类的符号后就以偏概全。java.lang包中的类会自动引入,因为他们可以看成是语言的基本扩展部分,因为java.lang包中的任何类在未使用import声明时也可以使用,就好像所以的程序文件中自动包含了import java.lang.*这个声明。
- 错题4:Java中生成对象必须使用new关键字。 分析:使用new运算符创建对象的过程为初始化,对象称为类的实例,可以使用new来实例化一个对象。
- 错题5:使用JDB进行调试时单步执行命令有step和next,我们优先使用(next)。 分析:调试时遇到方法调用,我们先看调用结果对不对,结果正确,说明方法没有问题,就不用进入方法体了; 方法调用结果不对,我们才需要进入方法体进行调试。单步跟踪命令next和step在执行一般语句时没有区别,在执行有方法调用的语句时,next会把方法执行完,step
会进入方法体。所以在调试时,单步执行我们要优先使用next,这样效率比较高。
其他(感悟、思考等,可选)
说实话,这周的任务实在是太重了,每天把空闲时间都花在攻克这两章的知识上,还熬夜。对于我们没学过计算机导论的3班来说初次学习生知识会很佶屈聱牙,也许其他同学的感受不尽相同,但我往往在一个难知识点上画上很多时间。看着开学时制定的每天多余的学习任务表往往是心有余而力不足,希望老师能够适当减少些学习任务。虽然我知道这个要求并不很合理,但这是我内心最真实的感受。我的高中老师经常给我说“不要问为什么,要多问凭什么”,这句话我当时觉得很好笑,但是在高三下期我却不自觉的以这句审视自己,“你凭什么不能提高成绩,你凭什么不能学好。”也是这种精神让我成绩突飞猛进,更是有了一种血性和拼劲,所以我并不介意学习任务的多少,因为我可以做出调整。“我凭什么不能学好这门课?”也是我一直在反省的内容。管理学的老师讲过一个道理,老板在适当给出大于工人平均工作任务的任务后,工人的效率会显著提高。但是在老板给出明显超过工人能力的任务后,工人的效率不仅没有提高,反而急剧下降,并且工人也是哀声怨气。我真的想学好java,只是最近一周各种不可预料的事宜让我很累,还有上课时以一些比如考试排名不变,各种加分政策的形式激励,同学之间明争暗斗的刺激氛围下让我情绪很紧张,压力很大,说实话高三最后时刻拼搏时也没有天天学到12点半甚至1点,这是健康的大学生活吗?望老师多多理解。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 180/180 | 1/4 | 15/15 | |
第二周 | 465/645 | 1/5 | 18/33 | 学习了scanner |
第三周 | 456/1101 | 1/6 | 17/ 50 | 学会了如何编写数学公式等 |
第四周 | 620/1734 | 2/8 | 40/90 | 学了条件循环和数组 |
第五周 | 0/0 | 1/9 | 0/0 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
计划学习时间:25小时
实际学习时间:40小时
精髓时间:5小时
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)