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

Posted pframe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20172303 2017-2018-2 《程序设计与数据结构》第8周学习总结相关的知识,希望对你有一定的参考价值。

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

教材学习内容总结

第十一章 异常

1.异常

  • 异常处理
    • 异常处理的常用方法有三种:
      • 根本不处理
      • 当异常发生时处理异常
      • 在程序的某个位置集中处理异常
    • 处理异常的主要方法是捕获异常
  • 异常捕获——try-catch语句
    • 格式:
    • try { 语句块 } catch(异常名称 exception) { 处理异常的语句 } finally { 语句块 }
    • try语句之后必须有一条或多条catch子句,但可以没有finally子句,在finally子句存在使,无论try语句块执行时是否发生异常,finally子句都将执行。
  • 异常的传递
    • 例:假设一个程序执行时,它要调用一个类的Method1方法,但Method1方法要调用Method2方法,但Method2方法中发生了异常,如果没有处理这个异常的话,它就会传递到Method1中,使Method1方法也产生异常。
    • 在遇到传递的异常时,要仔细考虑实际情况,寻找合适的地方来处理异常。
  • 异常类层次结构
    • 见图:技术分享图片
  • 自定义异常
    • throw:抛出异常
    • throws:用于方法名的后面,做一个声明,表示下面可能会有这个异常,但是具体还是要用throw来抛出异常。
    • 在自定义异常中throws和throw必须是成对出现的,除非用try-each语句解决,但是已经定义好的异常是不用的。
  • I/O异常
    • I/O类执行时产生的异常成为IOEexception异常
    • 标准输入/输出/错误流
标准I/O流 名称 说明
System.in 标准输入流 从键盘输入信息
System.out 标准输出流 在显示器上显示信息
System.err 标准错误流 在显示器上输出错误信息

2.文件读写(虽然此部分不是书上内容,但是是老师上课讲的重点内容)

  • 文件创建(使用File类)
    • 格式
      File file = new File(文件保存路径 文件名称) if (!file.exists()) //假如文件不存在时 { file.createNewFile(); //创建文件 }
    • 主要方法截图:技术分享图片技术分享图片
  • 文件夹创建(使用File类)
    • mkdir:只能创建一个新文件夹。
    • mkdirs:可以创建一个新文件夹的同时在这个文件夹下再创建一个新的文件夹。
  • 文件读写
    • 字节操作流(使用FileOutputStream和FileInputStream类)
      • 格式:

        //文件写入
        OutputStream outputStream = new FileOutputStream(file);
        byte[] hello = {‘H‘,‘e‘,‘l‘,‘l‘,‘o‘,‘,‘,‘W‘,‘o‘,‘r‘,‘l‘,‘d‘,‘!‘};
        outputStream.write(hello);
      • 主要方法截图:技术分享图片

        //文件读取
        InputStream inputStream = new FileInputStream(file);
        while (inputStream.available()> 0){
        System.out.print((char) inputStream.read()+"  ");
        }
        inputStream.close();
      • 主要方法截图:技术分享图片
    • 字节缓冲流(使用BufferedOutputStream和BufferedInputStream类)
      • 格式:

        //文件读取
        byte[] buffer = new byte[1024];
        String content = "";
        int flag = 0;
        InputStream inputStream = new FileInputStream(file);
        BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
        while ((flag = bufferedInputStream.read(buffer))!=-1){
        content += new String(buffer,0,flag);
        }
        bufferedInputStream.close();
      • 主要方法截图:技术分享图片

        //文件写入
        OutputStream outputStream = new FileOutputStream(file);
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
        String content1 = "写入文件的缓冲区内容";
        bufferedOutputStream.write(content1.getBytes(),0,content.getBytes().length);
        bufferedOutputStream.flush();
        bufferedOutputStream.close();
      • 主要方法截图:技术分享图片
    • 字符操作流(使用FileWriter类和FileReader类)
      • 格式:

        //文件读取
        Writer writer = new FileWriter(file);
        writer.write("Hello, World!");
        writer.flush();
        writer.append("Hello,Java"); // 在文件中续写
        writer.flush();
      • 主要方法截图:技术分享图片技术分享图片

        //文件写入
        Reader reader = new FileReader(file);
        System.out.println();
        char[] temp = new char[100];
        reader.read(temp);
      • 主要方法截图:技术分享图片
    • 字符缓冲流(使用BufferedOutputStream类和BufferedInputStream类)
      • 格式:

        //文件读取
        BufferedWriter bufferedWriter = new BufferedWriter(writer);
        String content = "使用bufferedWriter写入";
        bufferedWriter.write(cont.length());
        bufferedWriter.flush();
        bufferedWriter.close();
      • 主要方法截图:技术分享图片

        //文件写入
        BufferedReader bufferedReader = new BufferedReader(reader2);
        while ((content =bufferedReader.readLine())!= null){
        System.out.println(content);}
      • 主要方法截图:技术分享图片

        第十二章 递归

  • 递归是一种允许一个方法调用自己以达到最终目的的技术。
    • 例:

      //计算n的阶乘
      factorial(n){
      if(n==1)
      return 1;
      else
      return factorial(n-1)*n;
      }
  • 递归的种类
    • 无穷递归:只有递归定义的部分而没有非递归定义部分的递归
    • 直接递归:方法调用自己的递归
    • 简介递归:一个方法调用其他方法,最终再调用自己的递归。
  • 递归的原因

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

  • 问题1:看书的时候不是很理解排序算法的效率究竟是怎么来的,n^2还好理解,但是n㏒?n是怎么得出的就不是很清楚了
  • 问题1解决方案:上网查了一下排序算法有八种,其中对于如何得到n㏒?n的,堆排序解释的比较清楚,但是堆排序的定义博客里解释了很久直接粘贴过来太占用篇幅,所以仅把地址放过来,这里只放如何计算效率的解释:
  • 除此之外,还有一种桶排序(定义:将阵列分到有限数量的桶子里。每个桶子再个别排序,但有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)提供了比n㏒?n效率更高的方法:假设有n个数字,有m个桶,如果数字是平均分布的,则每个桶里面平均有n/m个数字。如果对每个桶中的数字采用快速排序,那么整个算法的复杂度是 O(n + m * n/m*log(n/m)) = O(n + nlogn - nlogm)从上式看出,当m接近n的时候,桶排序复杂度接近O(n)

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

  • 问题1:做PP10.5时movies提示错误
  • 问题1解决方案:使用Alt+Enter找不到解决方法,于是询问了结对的张昊然同学,发现直接引用以前的DVD类是不行的,还需要加一个compareto方法。

代码托管

技术分享图片

上周考试错题总结(正确为绿色,错误为红色)

  • 错题1:An interface name can be used to declare an object reference variable.
    • A . true
    • B . false
  • 原因及理解情况:用于声明引用的既可以是类名也可以是接口名。

结对及互评

点评模板

  • 博客中值得学习的或问题:
    • 优点:教材学习总结有改进,从参考资料的变化也能看出开始下功夫往深想了
    • 问题:在提醒之前错题放的是错的,应该总结的是第九章错题,他放的第十章
  • 代码中值得学习的或问题:
    • 优点:本周代码的优点不是很明显...
    • 问题:在引用DVD类和DVDCollection类时其实可以使用import,要比直接复制过来简单许多

      点评过的同学博客和代码

  • 本周结对学习情况
    • 20172322
    • 结对学习内容
      • 解决了PP10.5遇到的问题。

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

  • 本周最难的部分我觉得是文件读写这部分,虽然感觉上课听懂了,但是老师留的实践作业花了整整一天才实现,但是又被学长否定了说实践的不合理所以又推到重来了一遍,但是没想到重新改的一遍只用了一晚上时间。所以说,前期漫长难熬的艰苦岁月是必要的,因为它在为你之后能走的捷径铺路。
  • 教材复习情况
    • 复习进度(页数):101/310
    • 重要成长:
      • 复习了String类、Random类、NumberFormat类、DecimalFormat类的相关内容。
    • 感想:这周最大的收获就是把那些常用类都标记下来了,这样以后就不用来回翻书了。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 120/120 1/1 9/9
第二周 246/366 1/2 9/18
第三周 785/1121 2/4 15/33
第四周 615/1736 1/5 20/53
第五周 1409/2645 1/6 24/77
第六周 561/3206 1/7 20/97 再次搞清了一些自己有点含糊不清的概念
第七周 63/3269 1/8 15/112
第八周 2476/5745 3/11 90/201
第九周 688/6433 1/12 20/221
  • 计划学习时间:15小时
  • 实际学习时间:20小时
  • 改进情况:其实本周大部分时间都在项目开发上,教材学习占得比例不是很大

参考资料


以上是关于20172303 2017-2018-2 《程序设计与数据结构》第8周学习总结的主要内容,如果未能解决你的问题,请参考以下文章

20172303 20172322 2017-2018-2 《程序设计与数据结构》结对编程项目-四则运算 项目总结

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

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

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

172303 2017-2018-2 《程序设计与数据结构》实验二报告

20172303 2018-2019-1 《程序设计与数据结构》实验三报告