java为什么Scanner#nextInt inside for循环不断抛出异常?
我一直在学习JAVA,我对代码有点怀疑:
class apple {
public static void main(String[] args) {
int[] num = new int[3];
Scanner input = new Scanner(System.in);
for (int i = 0; i < num.length; i++) {
try {
num[i] = input.nextInt();
} catch (Exception e) {
System.out
.println("Invalid number..assigning default value 20");
num[i] = 20;
}
}
for (int i = 0; i < num.length; i++) {
System.out.println(num[i]);
}
}
}
我写了一个处理异常的小程序,若用户输入不是Int,抛出一个异常并指定默认值。 如果我把scanner语句放在for循环中,它就可以正常工作,但如果我把它放在它的外部,则会指定引发异常的相同值,即我输入的是char而不是int。 但若我输入所有整数,它会在数组中指定正确的值
Scanner input = new Scanner(System.in);
我希望你们理解我的问题
# 1 楼答案
如果^{} 无法解析整数,则它不会超越输入,因此如果在解析失败后继续调用它,它将继续尝试再次解析相同的输入,抛出
InputMismatchException
您可以在} ,忽略它返回的字符串,以跳过无效输入:
catch
块中调用^{# 2 楼答案
更好的代码是,您可以检查下一个值是否为整数,这样您甚至不需要捕获异常:
# 3 楼答案