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解决方案:第一,检查代码,发现很明显的一个错误:1334032-20180513223528423-325651994.png
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;
        }

取另一数组进行暂存数据,再进行计算,可以解决问题。1334032-20180513223548898-1687630870.png


代码托管

(statistics.sh脚本的运行结果截图)1334032-20180513223555710-433728352.png


上周考试错题总结

  • 错题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/1951/420/20对代码产生了很大兴趣
第二周309/5041/520/40打字速度明显提升
第三周311/8152/725/65
第四周474/12891/830/95抗...抗压能力加强?
第五周260/15491/915/110了解到预习的重要性
第六周358/19072/1120/130打字速度明显提升
第七周780/26872/1315/145学会使用JUnit
第八周2124/48112/1015/160
第九周967/57782/1220/180递归思想的利用

结对互评

唐才铭19:总结的问题非常多,但是都解决了;在内容总结上对于过于简单的内容(如:汉诺塔问题,仅仅作为一个递归的应用例子出现)可以选择略去不提。
王文彬29:对问题问得很深入,所以解决得也挺仔细的;也有把书上的小标题直接当作总结写入“教材内容总结”的问题,个人觉得这是过于局限于教材了。

参考资料

转载于:https://www.cnblogs.com/zhaoqianchen/p/9033755.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值