20172316 2017-2018-2《程序设计与数据结构》第九周学习总结

20172316 2017-2018-2《程序设计与数据结构》第九周学习总结

教材学习内容总结

  • 第十一章:异常
  1. 异常处理,对于异常有三个选择:不处理、发生时处理和在某个位置集中处理,常见的异常有ArithmeticExceptionNullPointerExceptionIOException等。
  2. 未捕获的异常,异常不进行处理的话,程序就会被终止,之后的语句都不会执行。解决方法是↓↓↓
  3. try-catch语句,使用try语句包括要执行的、可能发生异常的语句,然后使用catch子句处理异常,每个catch语句处理对应的异常。
  4. finally语句,放在try-catch语句后面,不论try语句块中是否发生异常,finally都将执行。
  5. 异常类层次结构, Throwable类是Error,Exception类的父类
  6. 异常的可检测与不可检测,可检测异常要由方法捕获,或者由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

参考资料

猜你喜欢

转载自www.cnblogs.com/zhaoqianchen/p/9033755.html
今日推荐