20172305 《程序设计与数据结构》第九周学习总结

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

教材学习内容总结

本周内容主要为书的11.1-11.6和12.1-12.3的内容:

  • 第十一章

    • 1.异常(try-catch语句、异常类的层次和异常的处理)php

      • 异常是一个定义非正常状况下或错误的对象,错误是表明不可恢复的问题而且必须捕获处理。html

        错误与异常都是在程序编译和运行时出现的错误。不一样的是,异常能够被开发人员捕捉和处理;而错误通常是系统错误,通常不须要开发人员处理(也没法处理),好比内存溢出。
        Exception是java中全部异常的基类。在java中异常被分为两大类,编译时异常和运行时异常。
        Error是java中全部错误的基类。错误一般是咱们没法处理的,绝大多数状况下,咱们不该该试图捕获错误。java

      • 异常体系具备可抛性,这个特性是Throwable体系中独有的特色。git

      • throws throw
        区别1 使用在函数上 使用在函数内
        区别2 后面跟异常对象类(能够多个,逗号隔开) 后面跟异常对象
      • 若是程序不处理异常,则将非正常地终止执行,并产生关于描述在何处发生什么异常的信息。web

      • try-catch语句能够捕获并处理异常,程序将继续正常执行。算法

      • 每个try-catch语句均可以有一个可选的finally子句,用于定义一段不管是否有异常发生都将执行的代码。try语句块能够没有catch子句,没有catch子句时,若是须要仍然可使用finally子句。编程

      • try-catch语句的finally子句的执行与如何退出try语句无关。若是没有异常产生,try语句块能够执行完后将执行finally子句,当抛出异常时,将执行相应的catch子句,而后执行finally子句。数组

      • 经过继承Exception类创建新的异常类,新的异常类最终是Throwable类的后代类,可使用throw语句。网络

    • 2.I/O数据结构

      • 流是一个有序的字节数列

      • 标准的I/O流有三种,System类中有三种对象引用变量(in,out和err),分别表明了三种标准的I/O流。System.in为标准的输入流--键盘,System.out为标准输出流和System.err为标准错误流--显示器屏幕上的一个具体窗口。

  • 第十二章

    • 1.递归思想

      • 递归是一种编程技术,容许一个方法调用本身以达到最终目的。递归是以一种事物自身定义自身的过程。

      • 任何递归的定义都必须有结束递归选择的基本状况。 递归方法一定有一条if-else语句,其中的一支做为检测基本状况的值。

      • 直接递归:方法调用本身的递归。
      • 间接递归:若是一个方法调用其余方法,最终致使再次调用本身的递归。
    • 2.迷宫旅行和汉诺塔问题

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

  • 问题1:异常类的方法和异常类的体系
  • 问题1解决方案:在Throwable类中方法里面找到了每次出现异常的时候抛出的错误提醒和异常何处的问题。getMessage()[返回此 throwable 的详细消息字符串。]和getStackTrace()[提供编程访问由 printStackTrace() 输出的堆栈跟踪信息。]两个方法产生的。其中的Exception算是全部异常的父类,其下的全部子类都是每个相对具体的异常。异常的规定也是按照一种编写类的方式,编写类中方法的方式进行构造的。

    • Throwable类是Error和Exception类的父类。
    • Throwable 类是 Java 语言中全部错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能经过 Java 虚拟机或者 Java throw 语句抛出。相似地,只有此类或其子类之一才能够是 catch 子句中的参数类型。
    • 异常类的体系结构:
  • 问题2:可检测异常和不可检测异常--RuntimeException类
  • 问题2的解决方案:Java中惟一的不可检测异常是RuntimeException类的对象或该类的后代对象。全部其余异常都是可检测的异常。对于可检测的异常是,发生异常的方法不捕获和处理该异常,则必须在该方法定义的声明头中包含throws子句。

    • 可检测异常在方法定义的声明头中追加一条throw子句,就明确承诺了该方法在异常发生时将抛出或传递异常。
    • 不可检测异常则不须要只用throws子句。
  • 问题3:递归和循环
  • 问题3的解决方案:递归和循环的差异,我以为最明显的就是递归的不断的调用本身的方法,而循环则是否则,经过for、while、do循环进行一次一次的往复运算。递归和循环二者彻底能够互换。若是用到递归的地方能够很方便使用循环替换,而不影响程序的阅读,那么替换成递归每每是好的。像斐波那契数列、汉诺塔、阶乘等问题均可以用递归解决。

    递归算法
    • 优势:代码简洁、清晰,而且容易验证正确性。(若是你真的理解了算法的话,不然你更晕)
    • 缺点:它的运行须要较屡次数的函数调用,若是调用层数比较深,须要增长额外的堆栈处理(还有可能出现堆栈溢出的状况),好比参数传递须要压栈等操做,会对执行效率有必定影响。可是,对于某些问题,若是不使用递归,那将是极端难看的代码。
    循环算法
    • 优势:速度快,结构简单。
    • 缺点:并不能解决全部的问题。有的问题适合使用递归而不是循环。若是使用循环并不困难的话,最好使用循环。
  • 问题4:字节流和字符流
  • 问题4的解决方案:在java.io包中操做文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操做。在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成。(这四个都是抽象类)在全部的硬盘上保存文件或进行传输的时候都是以字节的方法进行的,包括图片也是按字节完成,而字符是只有在内存中才会造成的,因此使用字节的操做是最多的。两种写入文件的方式,但字节流的使用更重要。

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

  • 问题1:PP12.1while循环转递归
  • 问题1解决方案:判断是否为回文的方法就是头尾各取一个字符进行比较是否相等,不断的循环下去。可是在刚开始想的时候,我不知道如何编写,彻底没思路。是从while (another.equalsIgnoreCase("Y"))就开始写仍是就单纯的判断回文处进行编写,不管是前者仍是后者都不知道代码如何去写。顿觉脑洞的重要性,有一个会编程的脑壳该多好啊!我尝试了写前者的代码,可是每写一步都举步维艰,因此放弃着手写后者,可是后者在哪发生递归还是个问题,还有非递归的位置,又该如何编写。在看过同窗编写的代码,恍然大悟,对于一个和两个的字符做为非递归的位置,而较多的字符能够进行一个递归处理,这样完成了,在用递归的main函数里面进行一个是否继续继续下去的递归不就行了。
public static boolean Palindrome(String str)
      {
          if(str.length()==1)
              return true ;
          else if(str.length()==2)
          {
              if(str.charAt(0)==str.charAt(str.length()-1))
                  return true ;
              else
                  return false ;
          }
          else if(str.charAt(0)==str.charAt(str.length()-1))
              return Palindrome(str.substring(1,str.length()-1)) ;
          else
              return  false;
      }
  • 问题2:PP11.1和PP11.2的异常处理
  • 问题2解决方案:对于此编程项目,着实费了很多功夫,尤为是PP11.1的要求,我理解处两种处理方式,一种是用户每次输入的字符串的一个处理,一种是用户一直在输入字符串直至输到DONE的时候,终止输入而后在判断整个字符串的一个处理。多是个人理解力有问题致使,因此,我觉的前者能够先尝试尝试,因此个人PP11.1就是按照前者进行编写的,可是在编写PP11.2的时候本身不会编写了,有辄回来写第二种的代码,很简单就搞定了。多是我以前的理解有误吧。
    • PP11.1

    • PP11.2

  • 问题3:IO操做及异常处理
  • 问题3解决方案:刚听完IO的问题就要去编写IO的代码,感受好恐怖。听的云里雾里的,尤为还有一堆的类去理解,用哪一个不用哪一个的问题,对应的writer和reader什么的,一堆一堆的,好在有老师给的代码能够参考。在老师的代码中有BufferedOutputStream和BufferedInputStream两种可供理解,两种字节流可使用,进行往文件里面写入读出。(在文件里面写出这两串数字真不容易......)

    • Buffered缓冲流::BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter,是带缓冲区的处理流,缓冲区的做用的主要目的是:避免每次和硬盘打交道,提升数据访问的效率。
    • ![](https://images2018.cnblogs.com/blog/1333004/201805/1333004-20180512161614361-1642312559.png)
  • 问题4:PP12.杨辉三角的编写
  • 问题4的解决方案:在以前查递归的时候看到过杨辉三角的编写代码,也就有了思路能够参考,编写起来我把生成的数存放到一个二维数组里面,再从数组里面进行调用方法,这样的话就能够造成杨辉三角了。可是,在和小组成员进行交流的时候,发现本身好像把题意理解错了,要求的是输出杨辉三角的第N行,结果我是全输出了。在解决这个问题的时候,脑洞大开正好最近在学习I/O流的问题,我把杨辉三角写入文件中,而后再一行行的调取,存入一个字符串数组中,而后再读取最后一行即为要求输出的一行。方法能够实现目的,可是感受很费事。暂时尚未想到更好的方法,因此用此方法完成做业了。
    • 杨辉三角的总体输出:
    • 按要求输出第N行:

代码托管

上周考试错题总结

  • 错题1:An interface reference can refer to any object of any class that implements the interface.(接口引用能够引用实现接口的任何类的任何对象。)
    • A.true
    • B.false
  • 错误解析:这是使用类名来声明引用变量的多态函数之一。接口实现多态性,就是如问题所说的那样,感受本身犯得错误很低级,不该该。

  • 本次考试是本身在高铁上答完的,因为网络的不稳定,致使本身答题时间特别长,好在没有崩掉。本身答题的时候,遇到不会的就是网上查找资源。因此,此次考试在网上查到了不少题,才会有很高的成绩的,其实本身水平并不高,仍是像上周那样,仍是好好学习才能缩短与好学生的差距。

结对与互评

点评(方艺雯)

  • 博客中值得学习的或问题:
    • 知识点记录的很详细,还有配图,图文结合。
    • 没有什么问题,很完美的博客。
  • 代码中值得学习的或问题:
    • 问题分析的很细致,还配有图片加以示意,很完美。
  • 基于评分标准,我给本博客打分:15分。
    • 得分状况以下: - 正确使用Markdown语法(加1分)
    • 模板中的要素齐全(加1分)
    • 教材学习中的问题和解决过程, 二个问题加2分
    • 代码调试中的问题和解决过程, 四个问题加4分
    • 感想,体会不假大空的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 代码规范加1分
    • 有动手写新代码的加1分

点评(王禹涵)

  • 博客中值得学习的或问题:
    • 参考资料特别多,能够看出课下很用功的进行学习。
    • 问题其实不少,并且写的也很好,可是排版上来看就是很乱很乱的。但愿下次能够改正,版面就会很棒的!
  • 代码中值得学习的或问题:
    • 代码的问题,没什么问题,但愿继续保持就行。
  • 基于评分标准,我给本博客打分:13分。
  • 得分状况以下:
    • 正确使用Markdown语法(加1分)
    • 模板中的要素齐全(加1分)
    • 教材学习中的问题和解决过程, 五个问题加5分
    • 代码调试中的问题和解决过程, 二个问题加2分
    • 感想,体会不假大空的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 代码规范加1分
    • 有动手写新代码的加1分

互评对象

  • 本周结对学习状况
    20172304方艺雯
    20172323王禹涵

  • 结对学习内容:第十一章和第十二章
    • 1.异常

    • 2.I/O流

    • 3.递归

    • 4.递归应用--迷宫问题和汉诺塔问题

感悟

十一章和第十二章的内容讲的是异常和递归,并且第十一章中I/O流部份内容在蓝墨云上的视频一堆,感受本身有点忙不过来。并且立刻快要检查四则运算的编程实验了,咱们仨的代码,分开使用就能够,合在一块儿使用就一堆问题,好烦!看完第十二章的内容,感受本书已经学完了一大半,可是感受本身仍是以有不少问题,还有不少不足须要解决。惆怅......本身还有不少不少的关于I/O流的内容没有看,因此有关I/O流的问题尚未遇到不少,写的也就少了。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 136/136 1/1 15/15
第二周 570/706 1/2 20/35
第三周 613/1319 1/3 23/58
第四周 1249/2568 1/5 30/88
第五周 904/3472 1/6 30/118
第六周 540/4012 1/7 30/118
第七周 826/4838 1/7 30/178
第八周 925/5763 2/9 45/223
第九周 253/6016 2/10 55/278

参考资料

相关文章
相关标签/搜索