A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© MGC 中级黑马   /  2014-8-5 17:41  /  2221 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Test6 {

                public static void main(String[]args)
                {       
                        BufferedReader hm=new BufferedReader(new InputStreamReader(System.in));
                        int[] arr=new int[5];
                        int max=0;
                        for(int x=0;x<5;x++)
                        {
                               
                                try
                                        {
                                                System.out.println("请输入第"+(x+1)+"个数字");
                                                arr[x]=Integer.parseInt(hm.readLine());
                                        }
                                catch(Exception e)
                                        {
                                                e.printStackTrace();  
                                        }

                                if(x==0)
                                {
                                        max=arr[x];
                                        min=arr[x];
                                }
                                else
                                {
                                        if(arr[x]>max)
                                        {
                                                max=arr[x];
                                        }
                                        if(arr[x]<min)
                                        {
                                                min=arr[x];
                                        }
                                }
                               
                        }       
                        System.out.println("输入的数据中最大值为"+max);
       
                        System.out.println("输入的数据中最小值为"+min);
                }
               
               
}
如题,为什么catch后面不能加IOException??

点评

难道readLine()不出IO异常  发表于 2014-8-5 18:05
因为可能发生IO异常的代码——BufferedReader,没有在try中  发表于 2014-8-5 17:50

14 个回复

倒序浏览
本帖最后由 唕 于 2014-8-5 18:04 编辑


好像你前面加import java.io.*;就可以了  不知为什么
回复 使用道具 举报
BufferedReader hm=new BufferedReader(new InputStreamReader(System.in));这里面不是也有IOException吗?
回复 使用道具 举报
没有导入包,或导入import java.io.IOException;或导入import java.io.*;
回复 使用道具 举报
你没导包的原因,
回复 使用道具 举报
本帖最后由 怀念黑海岸 于 2014-8-5 20:08 编辑

       楼上的都没说到点子上哦,
       arr[x]=Integer.parseInt(hm.readLine());
       这句代码是会抛出两个异常的哦,第一个产生于readLine()方法,这个异常就是IOException异常。然后你在对接受到的数据进行格式转换时:会产生一个运行时异常:NumberFormatException--数据类型转换异常,这个异常不是IO异常下的子异常,而是属于IllegalArgumentException中的子异常,他是归属RuntimeException下的,这个异常产生的条件是:当你往键盘输入一组非纯数字组成的字符串时,就会抛出这个异常。你总不能把a s >*¥这些东西给我转换成数字吧,即使按照字符表转换过来了也不是你想要的结果啊.
      所以这儿不能用IOException捕获异常的原因就是他了,而Exception是IOException和RuntimeException的父类,所以你直接用父类去捕获异常这是允许的,但是对于问题处理去不适合。建议分别catch两个异常,分别处理. IOException异常处理过程随意,但是数据格式转换异常中的处理方式建议写成:
      catch(NumberFormatException e){
       continue;                            //因为键盘输入数据有误,所以重新跳回键盘输入地方再次等待键盘录入。直到键盘输入纯数字字符串为止。
      }
回复 使用道具 举报
没导包把~import java.io*
eclipce快捷键在异常处shift+ctrl+o
回复 使用道具 举报
MGC 中级黑马 2014-8-5 21:52:28
8#
怀念黑海岸 发表于 2014-8-5 20:02
楼上的都没说到点子上哦,
       arr[x]=Integer.parseInt(hm.readLine());
       这句代码是会抛 ...

谢谢你的回答,我试过你的方法还是不行,但导入IOEception后就可以
回复 使用道具 举报
哥们, 倒包, 如果你嫌一个一个倒包麻烦, 直接来个   java.io.*;不就得了 ? 如果你这是想省资源...那你就来个java.io.IOException
回复 使用道具 举报
导   包   
回复 使用道具 举报
楼上全说好了。。
回复 使用道具 举报
可能是try要执行的代码出现的并不是IOException异常。而,Exception是所有异常的父类,父类肯定就行得通了。
回复 使用道具 举报
没导包   在前面加上import java.io*
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马