黑马程序员技术交流社区

标题: 关于毕老师异常里面那个电脑电脑蓝屏 冒烟的问题 [打印本页]

作者: 耶稣说wō乖    时间: 2013-8-4 15:58
标题: 关于毕老师异常里面那个电脑电脑蓝屏 冒烟的问题
本帖最后由 杨兴庭 于 2013-8-5 18:45 编辑

在毕老师的那个事例里,毕老师设置了一个state 来控制出现的异常,state=2是蓝屏异常,state=3是冒烟异常,
我想通过控制台输入1,2,3来控制异常,这样查看异常种类就只要编译一次了,但我加入 InputStream后他老提示:ExceptionDemo.java:23: 未报告的异常 java.io.IOException;必须对其进行捕捉或声明
以便抛出,我明明已经在run()方法,teach()方法,和主函数方法3个地方把它抛出了,为啥还是这个错误提示。。。。

  1. <P>import java.io.*;
  2. class ExceptionDemo
  3. {
  4. public static void main(String[] args)throws IOException
  5. {
  6.   Teacher t = new Teacher("毕老师");</P>
  7. <P>  try
  8.   {
  9.    System.out.println("今天讲课的老师是"+t.getName());
  10.    t.teach();
  11.   }
  12.   catch (StopException e)
  13.   {
  14.    System.out.println("放假,休息一天吧,原因是:"+e.toString());
  15.   }
  16. }
  17. }</P>
  18. <P>class computer
  19. {
  20. InputStream in =System.in;
  21. char ch = (char)in.read();
  22. public void run() throws BlueException,BoomException,IOException
  23. {
  24.   if(ch==1)
  25.   throw new BlueException("电脑蓝屏了。。");
  26.   if(ch==2)
  27.   throw new BoomException("电脑爆炸了。。");
  28.   if(ch==3)
  29.   System.out.println("电脑启动,开始上课");
  30. }</P>
  31. <P> public void reset()
  32. {
  33.   System.out.println
  34.    ("电脑开始重新启动。。。。"+"\r\n"+"重启完毕准备开始上课");
  35. }</P>
  36. <P>}</P>
  37. <P>class Teacher
  38. {
  39. private String name;
  40. private computer cp;</P>
  41. <P> public String getName()
  42. {
  43.   return name;
  44. }</P>
  45. <P> public Teacher(String name)
  46. {
  47.   this.name = name;
  48.   cp = new computer();
  49. }</P>
  50. <P> public void teach()throws StopException,IOException
  51. {
  52.   try
  53.   {
  54.    cp.run();
  55.   }
  56.   catch (BlueException e)
  57.   {
  58.    System.out.println(e.toString());
  59.    cp.reset();
  60.   }
  61.   catch (BoomException e)
  62.   {
  63.    throw new StopException("电脑炸了,不能讲课了");
  64.   }
  65.   System.out.println("今天我们讲课的内容是。。。。");
  66. }
  67. }</P>
  68. <P>class BlueException extends Exception
  69. {
  70. BlueException(String msg)
  71. {
  72.   super(msg);
  73. }
  74. }</P>
  75. <P>class BoomException extends Exception
  76. {
  77. BoomException(String msg)
  78. {
  79.   super(msg);
  80. }
  81. }</P>
  82. <P>class StopException extends Exception
  83. {
  84. StopException(String msg)
  85. {
  86.   super(msg);
  87. }
  88. }
  89. </P>
复制代码
我想实现控制台输入,要怎么实现?

作者: 薛淑凯    时间: 2013-8-4 18:41
第22行那句调用放在方法外边应该不能编译通过吧,还有read获得的是字符,拿它去比较数字肯定不成功,对应的是asc码吧
作者: 王松松    时间: 2013-8-5 01:02
InputStream in =System.in; 楼主想要抛出的异常应该是这句代码如果发生异常,就抛出IOException异常,但是为什么在run方法抛异常。run方法没有发生IOException异常。真正可能发生异常的地方你却没有抛。
作者: 耶稣说wō乖    时间: 2013-8-5 11:18
王松松 发表于 2013-8-5 01:02
InputStream in =System.in; 楼主想要抛出的异常应该是这句代码如果发生异常,就抛出IOException异常,但是 ...

对的,已经解决了,当我把InputStream in =System.in放到run方法中 再抛出就没问题了。谢谢了
作者: 耶稣说wō乖    时间: 2013-8-5 11:20
薛淑凯 发表于 2013-8-4 18:41
第22行那句调用放在方法外边应该不能编译通过吧,还有read获得的是字符,拿它去比较数字肯定不成功,对应的 ...

嗯嗯   我把他改成  int ch = in.read了  可以了
但是后面IF里面就要把  1   改成   49  
2改成   50
3改成   51
感觉好别扭,
问题基本上解决了  谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2