本帖最后由 怀念黑海岸 于 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; //因为键盘输入数据有误,所以重新跳回键盘输入地方再次等待键盘录入。直到键盘输入纯数字字符串为止。
}
|