20172316 2017-2018-2《程序设计与数据结构》第九周学习总结
教材学习内容总结
- 第十一章:异常
- 异常处理,对于异常有三个选择:不处理、发生时处理和在某个位置集中处理,常见的异常有
ArithmeticException
、NullPointerException
、IOException
等。 - 未捕获的异常,异常不进行处理的话,程序就会被终止,之后的语句都不会执行。解决方法是↓↓↓
try-catch
语句,使用try
语句包括要执行的、可能发生异常的语句,然后使用catch
子句处理异常,每个catch
语句处理对应的异常。finally
语句,放在try-catch
语句后面,不论try
语句块中是否发生异常,finally
都将执行。- 异常类层次结构,
Throwable
类是Error
,Exception
类的父类 - 异常的可检测与不可检测,可检测异常要由方法捕获,或者由
throws
语句列出。不可检测异常则不需要。
- 第十二章:递归
总结:一个方法调用自己就是递归。在编程中是非常实用的。
教材学习中的问题和解决过程
抛出和捕获是什么意思?听起来一个是拿来一个是丢掉,所以它们是反义词、两个相反的操作吗?书上对这两个术语的描述不甚详细。
通过网上资料进行总结理解:抛出异常是方法本身不进行处理,这个异常需要调用方法的时候进行处理;
捕获异常是在方法本身自己将异常进行处理。
代码调试中的问题和解决过程
- 问题1:PP12.9利用递归方式列出杨辉三角的某一行,得到的结果非常的奇葩,有时候又很接近。
- 问题1解决方案:第一,检查代码,发现很明显的一个错误:
if (n == 2) {
result.add(1);
result.add(1);
}
else{
result = pascal(n - 1);
for (int i = 1; i > n - 1; i++) {
int temp = result.get(i) + result.get(i - 1);
result.set(i, temp);
}
(通过for循环对第2~n-1个数字进行运算)要不是巧合,这里差点就成了一个死循环,i > n - 1
显然是不对的。
修改再检验,发现得到第四行的结果
[1,3,4,1]
本以为离成功还差一步,但这一步不知道哪里走错了,
那就根据递归一步一步从第2行到第4行计算,反正不长。
第2行:[1,1] √
第3行:[1,2,1] √
第4行:[1,3,4,1] ×
再由for一步一步分析,[1,2,1]→[1,3,1]→[1,3,4]→[1,3,4,1]
所以这里的“4”应该是“3+1”的结果,可知问题出在取对应值时取的是计算后的值而非上一行的值。
修改:
if (n == 2) {
result.add(1);
result.add(1);
}
else{
result = pascal(n - 1);
ArrayList<Integer> result2 = new ArrayList<Integer>();
result2.add(1);
for (int i = 1; i < n - 1; i++) {
int temp = result.get(i) + result.get(i - 1);
result2.add(temp);
}
result2.add(1);
result = result2;
}
取另一数组进行暂存数据,再进行计算,可以解决问题。
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
-
错题1: All run-time Errors throw Exceptions.
正确答案:B.false
原因:结果显而易见,如果我们用try-catch语句就可以不抛出了。 -
错题2:A try statement must have at least one catch statement, but could have many catch statements, and may or may not have a finally clause.
正确答案:A.true
原因:点错了,使用try之后必须要有至少一个catch,至少在IDEA中如果没有接下来的catch就会出现红线提示,finally是可有可无的,有需求就可以用。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 195/195 | 1/4 | 20/20 | 对代码产生了很大兴趣 |
第二周 | 309/504 | 1/5 | 20/40 | 打字速度明显提升 |
第三周 | 311/815 | 2/7 | 25/65 | 无 |
第四周 | 474/1289 | 1/8 | 30/95 | 抗...抗压能力加强? |
第五周 | 260/1549 | 1/9 | 15/110 | 了解到预习的重要性 |
第六周 | 358/1907 | 2/11 | 20/130 | 打字速度明显提升 |
第七周 | 780/2687 | 2/13 | 15/145 | 学会使用JUnit |
第八周 | 2124/4811 | 2/10 | 15/160 | 无 |
第九周 | 967/5778 | 2/12 | 20/180 | 递归思想的利用 |
结对互评
唐才铭19:总结的问题非常多,但是都解决了;在内容总结上对于过于简单的内容(如:汉诺塔问题,仅仅作为一个递归的应用例子出现)可以选择略去不提。
王文彬29:对问题问得很深入,所以解决得也挺仔细的;也有把书上的小标题直接当作总结写入“教材内容总结”的问题,个人觉得这是过于局限于教材了。
参考资料
- 《Java程序设计教程(第八版)》电子工业出版社
- 《使用码云和博客园学习简易教程》
- 《使用开源中国(码云)托管代码》