zoukankan      html  css  js  c++  java
  • 20162311 2016-2017-2 《程序设计与数据结构》第八周学习总结

    20162311 2016-2017-2 《程序设计与数据结构》第八周学习总结

    教材学习内容总结

    • 异常处理
      • 异常是一个对象
      • 程序运行出现异常时,可以捕获并进行适当处理
    • try-catch语句
      • finally子句
    • 异常的传播
    • 异常可以形成类层次
      • 异常分为免检异常和必检异常
    • I/O异常
      • 输入输出时会出现异常

    蓝墨云班课视频学习总结

    • 异常的分类
      • RuntimeException以及它的子类都属于unchecked(免检)异常,其余属于checked(必检)异常
      • checked异常不进行处理或抛出的话,无法通过编译
    • throwthrows的作用
      • throw用来抛出一个异常对象
      • throws用来声明异常(必检异常),throws Exception紧跟在方法之后
    • Java中的I/O
      • 读取文件和写入文件的方法
      • I/O中的核心类:InputStream,OutputStream是所有字节流的父类
    • 内部类和匿名内部类
      • 内部类:一个类定义在另一个类的内部
      • 匿名内部类:没有名字的内部类

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

    • 问题1:在看云班课里的视频时,我跟着视频里的老师一起敲测试代码,把一个from.txt文件里的内容打印出来,却出现了不一样的情况

      文件内容是“abcd”,按理打印出的应该是97、98、99、100(“abcd”的ASCII码),可是我的结果却是在100后面多了个10。

    • 解决方案:我到云班课上提问,老师提示我查查10在ASCII码中的含义,于是我查了ASCII码表,发现10是换行符。于是我在虚拟机中用od命令查看from.txt文件的内容,发现最后果然有个换行符。

      可是我并没有敲回车,也没有换行,为什么会有换行符呢?老师在讲解说,在Linux下,文件的每行会自动加一个换行符,我们是看不到的,要用od命令查看才能知道,而且如果实在Windows下,是自动加回车(“/r”)。

    • 问题2:书上的程序10.2有一行代码,用到了这样一个方法:Integer.praseInt();,不明白这个方法的作用。

    • 解决方案:查找API帮助文档。praseInt()Integer类中的一个静态方法,返回值类型为Int,作用是将字符串参数作为有符号的十进制整数进行解析。

      书上的代码是要将一串String类型的数字转化成Int类型

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

    • 问题1:在做PP10.1时,程序写好后编译运行,本应输入10个整数,结果确输了11个,我的源代码如下
    import java.util.Scanner;
    
    public class AverageNumberException
    {
      public static void main (String[] args)
      {
        String num;
        int num1, sum = 0, average, i = 0;
        final int TIMES = 10;
    
        Scanner scan = new Scanner(System.in);
    
        System.out.println("Enter 10 integers: ");
        System.out.print(" ");
        num = scan.nextLine();
        
        while (i>=0 && i<10)
        {
          try
          {
           num1 = Integer.parseInt(num);
           sum += num1;
           i++;
          }
          catch(NumberFormatException e)
          {
           System.out.println("The integer you entered is invalid! Please input again.");
          }
          System.out.print(" ");
          num = scan.nextLine();
        }
        
        average = sum / TIMES;
        System.out.println("Average: " + average);
      }
    }
    

    运行结果

    我输了出去异常的数字之外,我输了11个数程序才结束

    • 解决方案:我在IDEA上进行了调试,是循环出了问题

    我把循环条件改了一下:

    import java.util.Scanner;
    
    public class AverageNumberException
    {
      public static void main (String[] args)
      {
        String num;
        int num1, sum = 0, average, i = 0;
        final int TIMES = 10;
    
        Scanner scan = new Scanner(System.in);
    
        System.out.println("Enter 10 integers: ");
       
        
        while (ture)
        {
          try
          {
           System.out.print(" ");
           num = scan.nextLine();
           num1 = Integer.parseInt(num);
           sum += num1;
           i++;
          }
          catch(NumberFormatException e)
          {
           System.out.println("The integer you entered is invalid! Please input again.");
          }
          if (i==9)
          {
            break;
          }
        }    
        average = sum / TIMES;
        System.out.println("Average: " + average);
      }
    }
    

    但结果却是只能输9个数,我想肯定是循环出了问题,于是我把if(i==9)改成了if(i==10),改好之后就能输入10个数了(除了那个异常的数)。我想原因是输入第一个整数后,i自加1,从0变成1,这样循环下去,到第九个有效整数时,i就变成了9,也就退出循环了。我又看了一下最初的代码,发现是同样的问题,于是也改了一下

    import java.util.Scanner;
    
    public class AverageNumberException
    {
      public static void main (String[] args)
      {
        String num;
        int num1, sum = 0, average, i = 0;
        final int TIMES = 10;
    
        Scanner scan = new Scanner(System.in);
    
        System.out.println("Enter 10 integers: ");
        System.out.print(" ");
        num = scan.nextLine();
        
        while (i>=0 && i<9)
        {
          try
          {
           System.out.print(" ");
           num = scan.nextLine();
           num1 = Integer.parseInt(num);
           sum += num1;
           i++;
          }
          catch(NumberFormatException e)
          {
           System.out.println("The integer you entered is invalid! Please input again.");
          }
        }
        average = sum / TIMES;
        System.out.println("Average: " + average);
      }
    }
    

    可结果却是,可以输10个整数了,但算出的结果却不对。我又仔细看了一下代码,发现虽然循环对了,但是,我在循环外输入了第一个整数,这个整数没有被转化成Int类型的值并加到sum中去,所以相当于少加了一个数。于是我在循环外加上了num1 = Integer.parseInt(num);sum += num1;,这样就没有问题了。

    代码托管

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

    上周考试错题总结

    • 错题1:
    Which of the following methods are included with any object that implements the Iterator interface? (下面哪个方法包含了实现Iterator接口的对象?)
    A .next
    B .hasNext
    C .toString
    D .all of the above(以上都正确)
    E .a and b(a和b)
    正确答案: D  
    

    分析:nexthasnextIterator中的抽象方法,toStringObject中的方法,而所有类都是Object的子类,所以Iterator中也有toString方法。

    • 错题2:
    Suppose Animal is an interface that specifies a single method – speak.  Now suppose the Dog class implements the Animal interface.  In addition to the speak method, the Dog class also has a method called wagTail.  Now consider the following code(假设Animal是一个指定了单一方法的接口--speak。现在假设Dog类实现了Animal接口。除了speak方法外,Dog类还有一个方法wagTail。现在思考下面的代码:).
    
    Animal a = new Dog();
    a.wagTail();
    
    Which of the following  is true about this code?(关于这段代码,下面哪项是正确的)
    A .It will result in a compile-time error(这段代码会引起编译时错误).
    B .It will result in a run-time error.(这段代码会引起运行时错误)
    C .It will call the speak method defined in the Animal interface. (这段代码将会调用Animal接口中的speak方法)
    D .It will call the wagTail method defined in the Dog class(这段代码将会调用Dog类中的wagTail方法).
    E .none of the above are true. (以上都正确)
    正确答案: A  
    

    分析:这段代码会出现编译时错误,Animal接口中没有定义wagTail方法。可以将其显式转换为Dog类来调用wagTail方法。

    • 错题3:
    An interface cannot declare any instance variables(接口不能声明任何实例变量).
    A .true
    B .false
    正确答案: A
    

    分析:接口不能声明任何实例对象,但可用来声明对象引用变量。

    • 错题4:
    FHS(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准)定义了两层规范,第一层是()?
    A ./etc 应该放置设置文件
    B ./ 下面的各个目录应该要放什么文件数据
    C .针对 /usr 及 /var 这两个目录的子目录来定义
    D ./bin 与 /sbin 则应该放置可执行文件
    E ./var/log 放置系统登录文件
    F ./usr/share 放置共享数据
    正确答案: B
    

    分析:这是Linux的目录结构,参考Linux 基础入门(新版)中的第四节。

    结对及互评

    点评过的同学博客和代码

    思考

    Java是一门工具,从云班课里的视频可以看出,理论的东西较少。视频的大部分时间都是在用敲代码,也就是实践。所以向要学好Java,必须得多用,在运用的过程中找问题,从而学习到更多的东西。因此,不能仅仅照着书上的代码敲,还要多做课后的程序设计题目,培养自己的面向对象程序设计的思想,这样才能不断进步。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 113/113 1/1 10/10
    第二周 294/407 1/2 15/25
    第三周 433/840 1/3 15/40
    第四周 1169/2009 2/5 30/70
    第五周 825/2834 1/6 15/85
    第六周 331/3165 1/7 13/98
    第七周 738/3903 2/9 22/120
    第八周 428/4331 1/10 20/140
    • 计划学习时间:15小时

    • 实际学习时间:20小时

    • 改进情况:在PP上花的时间占大部分,主要还是做的少,自己写代码时常常要翻翻笔记,或者重新看一遍视频,毕竟只看一次记不住。这样在做PP时免不了花费大量时间。以后还应当在看视频时就跟着老师一起做测试,这样能较快地掌握相关知识。同时书上的内容也要弄懂,不然做PP时还要不停地翻书,查找相关资料。

    参考资料

  • 相关阅读:
    014 接口和抽象类有什么区别?
    013 抽象类能使用 final 修饰吗?
    web前端开发入门_ web前端需要掌握的知识体系
    使用Ajax同步请求时,等待时间过长增加页面提示问题
    h5移动端禁止长按图片保存
    深入浏览器事件循环的本质
    power assert_更智能、优雅的全方位 assert 断言库
    网络串流播放_HTML5如何优化视频文件以便在网络上更快地串流播放
    什么是断点续传?前端如何实现文件的断点续传
    移动端自适应
  • 原文地址:https://www.cnblogs.com/-zzr-/p/6725193.html
Copyright © 2011-2022 走看看