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时还要不停地翻书,查找相关资料。

参考资料

posted @ 2017-04-22 14:31  20162311张之睿  阅读(352)  评论(7编辑  收藏  举报