zoukankan      html  css  js  c++  java
  • 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:对问题问得很深入,所以解决得也挺仔细的;也有把书上的小标题直接当作总结写入“教材内容总结”的问题,个人觉得这是过于局限于教材了。

    参考资料

  • 相关阅读:
    Java实现 蓝桥杯 生命游戏
    Java实现 蓝桥杯 生命游戏
    Java实现UVA10131越大越聪明(蓝桥杯每周一题)
    Linux 静态库&动态库调用
    linux下c++开发环境安装(eclipse+cdt)
    怎样在Windows和Linux下写相同的代码
    教会你如何编写makefile文件
    Linux编译多个不同目录下的文件以及静态库、动态库的使用
    Fedora 17 下安装codeblocks
    Fedora 下安装codeblocks
  • 原文地址:https://www.cnblogs.com/zhaoqianchen/p/9033755.html
Copyright © 2011-2022 走看看