我一直在学习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抛出异常并分配默认值.如果我把扫描器语句放在for循环中,它工作正常,但如果我把它带到它之外,它会分配抛出异常的相同值,即我输入的是char而不是int.但是如果我输入所有整数,它会在数组中分配正确的值.
Scanner input = new Scanner(System.in);
我希望你们理解我的问题.
Scanner#nextInt
如果它无法解析整数,则不会超过输入,所以如果你在失败后继续调用它,它将继续尝试再次解析相同的输入,抛出InputMismatchException
.
您可以Scanner#next
在catch
块中调用,忽略它返回的字符串以跳过无效输入:
try { num[i] = input.nextInt(); } catch (Exception e) { System.out .println("Invalid number..assigning default value 20"); num[i] = 20; input.next(); }