我完全不熟悉编程,我遇到了一个问题,当我捕获InputMismatchException时,我无法返回到我的main do while循环。我搜索了Google,但我无法找到并完全理解用户提供的解决方案。
我的目标是消除用户输入任何可能使应用程序终止的字符的可能性。这就是我用try / catch包围几乎所有代码的原因。
我试图为我的代码添加更多循环,所有这些都以两种方式结束:
有人可以解释我如何实现目标吗?我也试过hasNextInt希望它再次要求我输入正确的值,但事实并非如此。我究竟做错了什么?我调试了应用程序,我可以看到的是,在我的代码结束时跳过了该过程。
Scanner scanner = new Scanner(System.in);
System.out.print("\nChoose mode: ");
int userInput = 0;
do {
do {
try {
userInput = scanner.nextInt();
switch (userInput) {
case 1:
Mode_1.multiplyTwoInteger();
break;
case 2:
Mode_2.multiplyTwoSpecifiedValues();
break;
case 3:
System.out.println("\nYou quit application. Goodbye :)");
return;
default:
System.out.print("Not found! Choose again game mode: ");
}
} catch (Exception InputMismatchException) {
System.out.print("Wrong input!\nChoose again:");
}
} while (userInput <= 0 || userInput > 3);
} while (userInput != 3);
答案 0 :(得分:0)
当您收到此异常时,您的控制台会出现此异常, nextInt()
会将其视为错误格式,并会提供 InputMismatchException 。
尝试重新初始化catch块中的 scanner 对象,例如 scanner =新扫描程序(System.in); ,或者您可以读取错误的输入 scanner.nextLine()强>
尝试更改您的代码以匹配如下:
try {
userInput = scanner.nextInt();
switch (userInput) {
case 1:
Mode_1.multiplyTwoInteger();
break;
case 2:
Mode_2.multiplyTwoSpecifiedValues();
break;
case 3:
System.out.println("\nYou quit application. Goodbye :)");
return;
default:
System.out.print("Not found! Choose again game mode: ");
}
} catch (Exception InputMismatchException) {
scanner=new Scanner(System.in); // Reinitiate the scanner object or use scanner.nextLine() to read bad input.
System.out.print("Wrong input!\nChoose again:");
}