有一个代码
public static int printInt() {
Scanner print = new Scanner(System.in);
try {
return print.nextInt();
} catch (InputMismatchException e) {
System.out.println("Введено не число!\nВведите повторно:");
return printInt();
}
}
当输入非数字时,块中的代码catch会被执行多次,直到栈满,出现栈溢出错误。
我不明白为什么Scanner它采用控制台本身输出的值并且不提供输入数字的机会。
我有一个解决方案,但我不喜欢它使用不必要的变量。
public static int printInt() {
Scanner print = new Scanner(System.in);
try {
return print.nextInt();
} catch (InputMismatchException e) {
System.out.println("Введено не число!\nВведите повторно:");
String t = print.nextLine(); // ненужная переменная
return printInt();
}
}
并建议一个不使用不必要变量的解决方案。
如果您需要以某种方式处理在先前尝试读取整数之后残留在输入流/扫描器中的不正确数据
print.nextInt,则使用 读取它就足够了print.next(),而无需将其存储在单独的变量中:检查输入流/扫描器中是否存在所需的数据类型也有意义,而不是捕获异常: