如何在异常捕获后延长do ... while循环

时间:2017-09-14 11:47:07

标签: java loops exception try-catch do-while

我完全不熟悉编程,我遇到了一个问题,当我捕获InputMismatchException时,我无法返回到我的main do while循环。我搜索了Google,但我无法找到并完全理解用户提供的解决方案。

我的目标是消除用户输入任何可能使应用程序终止的字符的可能性。这就是我用try / catch包围几乎所有代码的原因。

我试图为我的代码添加更多循环,所有这些都以两种方式结束:

  1. 我的循环在到达catch语句后永远不会完成。
  2. 我回到控制台,没有任何反应(我仍然可以输入)。
  3. 有人可以解释我如何实现目标吗?我也试过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);
    

1 个答案:

答案 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:");
                }