1 2 3 4

学号 2017-2018-20172309 《程序设计与数据结构》第9周学习总结

学号 2017-2018-20172309 《程序设计与数据结构》第9周学习总结

教材学习内容总结

  • 第十一章:
    - 异常处理:在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出),Throwable 有两个重要的子类:Exception(异常)和 Error(错误)。
    ①. Exception(异常)是应用程序中可能的可预测、可恢复问题。
    ②. Error(错误)表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。
    - 未捕获的异常:
    ①. 如果程序不处理异常,则将非正常的终止异常,并产生关于描述何处发生什么样的异常的信息。
    ②. 异常跑出的信息,提供了方法调用堆栈踪迹。
    - try-catch语句
    ①. try语句块可以有多个相关联的catch子句,,每一个catch语句称为一个异常处理器。
    ②. 如果没有异常抛出,将继续执行try语句后的语句(所有catch子句后的语句)。
    - finally子句
    ①. 用来定义一串必须执行的语句。
    ②. 常用来关闭资源。
    - 异常的传递
    如果在一个异常的发生处没有捕获和处理该异常,则该异常将传递给上级调用的方法。直到遇到main方法,将终止程序并产生错误信息。
    - 异常类层次结构
    ①. 自定义异常
    ②.可检测异常和不可检测异常
    - I/O!?
    1. IO流对数据的操作是通过流的方式
    2. Java对数据的操作是通过流的方式
    3. Java用于操作流的对象都在IO包中
    4.流按操作分为两种:字节流和字符流
    5. 流按流向分为:输入流和输出流

  • 第十二章:
    - 含义:递归算法是一种直接或间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。
    - 无穷递归:任何一个递归定义中必须有称为基本情况的非递归部分,才能使递归结束。否则称为无穷递归。
    - 每次递归调用都将新增内存空间,因此无穷递归常产生运行时错误,报告内存耗尽的错误信息。
    - 注意:递归不是唯一的选择,每种递归都能用循环迭代来完成,但对于某些问题将变得更加简练。
    - 直接递归与间接递归:
    一个方法调用自己称为直接递归

    一个方法调用其他方法,最终再调用自己,称为间接递归

     - 递归的运用:
            1. 迷宫旅行。
            2. 汉诺塔问题。 
    

教材学习中的问题和解决过程

  • 第十一章:
    • 问题一:异常和错误的异同点
    • 问题1解决方法:
      相关链接:运行时产生的异常与一般异常
    • 问题二:使用try-catch语句中的catch中的异常和实际出现的异常是怎么相互匹配的?也就是比如我出现了0作除数的错误,这个ArithmeticException错误怎么和catch()语句相互认识?
    • 问题二解决方案:在java中所有的异常都大部分自己已经自己定义好了的,当出现错误时,他们将自动匹配。
    • 问题三:书中catch子句调用了getMessage、printStackTrace方法,这两个方法如何使用,使用时应该注意什么?以及getMessage()与toString()方法有什么区别?
    • 问题三解决方案:总结:
      1. e.toString()获取的信息包括异常类型和异常详细消息,而e.getMessage()只是获取了异常的详细消息字符串。
      2. getMessage()和printStackTrace()方法的区别:
      3. e.getMessage(); 只会获得具体的异常名称. 比如说NullPoint 空指针,就告诉你说是空指针...
      4. e.printStackTrace();会打出详细异常,异常名称,出错位置,便于调试用.. 一般一个异常至少几十行
    • 问题四:遇到异常什么时候该捕获。什么时候抛出?
    • 问题四解决方案:
      简单点说就是能够捕获并处理就捕获处理,不能够就抛出。
      相关链接百度知道
    • 问题五:如何理解可检测异常和不可检测异常?
    • 问题五解决方案:
      1. java中异常分为两类:checked exception(检查异常)和nchecked exception(未检查异常)。
      2.所有不是RuntimeException派生的Exception都是检查型异常,未检查异常也叫RuntimeException(运行时异常).
      3. 对未检查的异常(unchecked exception )的几种处理方式:捕获、继续抛出、不处理
      4. 可检查异常:对于检查的异常必须处理,或者必须捕获或者必须抛出
      5. 对于RuntimeException的子类最好也使用异常处理机制。虽然RuntimeException的异常可以不使用try...catch进行处理,但是如果一旦发生异常,则肯定会导致程序中断执行,所以,为了保证程序再出错后依然可以执行,在开发代码时最好使用try...catch的异常处理机制进行处理。
  • 第十二章:
    • 问题一:递归、迭代各有什么优缺点。哪种情况用递归,哪种情况用迭代?
    • 问题一解决方案:
      注:当使用迭代法更加简单、易懂并易于编写程序时,应避免使用递归,递归会带来多次调用方法的开销,且经常显得不直观。
    • 问题二:递归的格式?
    • 问题而解决方案:就举个例子吧:N的阶乘:n!=n*(n-1)*(n-2)*...*1
  1. 递归法:
>     int factorial (int n) {
>     if (n == 1) //非递归部分
>     {
>         return 1;
>     } 
>    else//递归部分
>      {
>         return n*factorial(n-1);
>       }
>    }

原理:在执行以上代码的时候,其实机器是要执行一系列乘法的: factorial(n)factorial(n-1)factorial(n-2) → … → factorial(1)
2. 迭代法:

>       int factorial (int n) 
>       {
>       int product = 1;
>
>       for(int i=2; i<n; i++) 
>           {
>       product *= i;![](https://images2018.cnblogs.com/blog/1333063/201805/1333063-20180513172957257-818255889.png)


>           }
>      return product;
>       }

原理:先计算1乘以2,然后用其结果乘以3,再用的到的结果乘以4….一直乘到N。在程序实现时,可以定义一个计数器,每进行一次乘法,计数器都自增一次,直到计数器的值等于N截至。

代码调试中的问题和解决过程

  • PP11.1中出现的问题:如何达到题目要求“直到输入“DONE”为止”?
  • 解决方案:这个问题出现是因为我理解题目出现了问题,我以为是一下子输入一大串字符串,然后从中读取,读到“DONE”就停止。其实不是的,而是检测到输入得单词为“DONE”就停止,然后判断总输入字符串是否超过长度20个,如果是,就抛出异常。
    代码链接
  • PP12.1中出现的问题:如何使用递归实现代码?基本情况与递归情况应该怎么确定?
  • 解决方案:
    代码链接
  • PP12.9中出现的问题:应该如何排版,实现输出后呈现塔的形状?
  • 解决方案:每行前的空格是有规律的,第1行有n-1个空格、第2行有n-2个空格·····第n行有0个空格,用循环即可实现!

    代码链接

代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

  • 第十章测试错题:
    - 错题1:
    - 错误原因:没有看到这一组元素中的最小数2。另外选出最小数后应该与最前面一个数换位置。
    - 错题2:
    - 错误原因:选择时是准备选覆盖的,但是不知道怎么就是选了A!!
    - 错题3:
    - 错误原因:没有了解到排序的实质,这两种排序都是对一组数据的重新组合,不需要额外的空间内存。
    - 错题4:
    - 错误原因:虽然继承和接口支持多态,但只有在有后期绑定时才会这样做。但是,重载是多态性一(方法)名的一种形式,多个主体,只要程序使用重载,多态就在使用中。
    - 错题5:
    - 错误原因:这是一种用于完成多态引用的技术,它的精确解释将在执行过程中发生变化,这取决于变量在遇到时所引用的精确对象。
  • 第十一章测试错题:
    - 错题1:
    - 理解情况:抛出异常是被当前的代码如果代码包含在一个try语句和适当的catch语句实现,否则是传播的方法调用的方法引起的异常,在一个合适的声明,否则继续传播通过相反的顺序的方法,这些方法被调用。然而,一旦达到了主要的方法,这个过程就停止了。如果没有被捕获,异常会导致程序终止(这将是应答a,例外被忽略)。然而,异常不会被抛出异常类。
    - 错题2:
    - 理解情况:这两个例外都是RuntimeException的子节点,它本身就是一个例外的子节点。错误是一个可抛出的对象,它与异常不同,而非法访问异常和CheckedException是异常的子元素,而不是RuntimeException。
    - 错题3:
    - 理解情况:保留的单词投掷用于在检测异常时抛出异常,如:如果(得分<0)抛出新的非法测试分数异常(“输入分数”+分数+“为负”);
    - 错题4:
    - 理解情况:B、C和D的答案都是正确的,runtimeexception是可抛出的对象,并且不是错误类的一部分,而且两种类型的runtimeexception都是算术异常和NullPointerException。不是runtimeexception异常的例外包括各种检查异常,但是runtimeexception不是检查异常。
    - 错题5:
    -理解情况:输入到Java程序是很困难的,因为它需要大量的开销。扫描器类实现了所有的开销,这样程序员就不必看到它了。因此,扫描器是在没有细节的情况下执行输入操作的抽象。这些细节包括导入java。io类,以某种方式处理ioexception,从标准输入流中输入,将输入划分为单个令牌,并根据需要将每个令牌转换成请求表单。

点评模板:

点评情况

  • 博客中值得学习的或问题:

    • 课本知识点总结充分。
    • 不懂得积极通过网络解决
    • 这是不是排版出现点问题了啊
  • 基于评分标准,我给本博客打分:14分。

点评过的同学博客和代码

  • 本周结对学习情况

    • 20172310
    • 结对学习内容
      • 第十一章和十二章的学习
      • 四则运算的代码完善与补充
  • 上周博客互评情况

其他(感悟、思考等,可选)

总的来说,这两章很难。都很难理解,在第十章中难点是IO流,其中有的部分直到现在还没完全理解。o(╥﹏╥)o~~看来只能在后面自己看视频慢慢的补上去了。对于第十二章,虽然课本上的知识点很少,但是道理我都懂,就是代码看不懂······ 这个还得接下来问同学了。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 075/200 1/1 05/20
第二周 560/500 1/2 13/38
第三周 972/1000 1/4 21/60
第四周 694/1666 1/5 21/90
第五周 1544/3095 1/6 30/90
第六周 600/3627 1/7 30/120
第七周 544/4200 2/9 20/140
第八周 907/5107 2/10 20/160
第九周 700/5807 1/11 20/180

参考资料

1.IO流-File类
2.递归与迭代详解
3.杨辉三角的排版

posted @ 2018-05-13 19:32  大大的梦  阅读(311)  评论(4编辑  收藏  举报