当前位置: 首页 > 知识库问答 >
问题:

如何延长。。。在异常捕获之后进行while循环

国斌斌
2023-03-14

我对编程完全是新手,我遇到了一个问题,当我捕捉到输入失配异常时,我无法返回到主do while循环。我搜索了谷歌,但我无法找到并完全理解用户给出的解决方案

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

我试图在我的代码中加入更多循环,结果都以两种方式结束:

  1. 我的循环在到达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);

共有1个答案

鲁涵意
2023-03-14

当您获得此异常时,您的控制台会出现此异常,并且nextInt()会将其读取为错误格式,并给出InputMismatchExctive。

尝试在catch block中重新初始化scanner对象,比如scanner=new scanner(System.in);或者你可以读一个糟糕的输入扫描仪。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:");
                }
 类似资料:
  • 问题内容: 一旦在此代码中捕获到异常,该方法就会运行,但是一旦我输入一个数字,程序就会关闭,并显示“生成成功”消息。一旦发生异常,是否有任何方法可以返回while循环? 问题答案: 将 try / catch 放入 while循环中 :

  • 问题内容: 我有这段代码。我想回到循环的起点,并再次要求用户输入。但是,它总是循环而不停止请求输入。我的代码有什么问题?谢谢 问题答案: 从http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextInt%28int%29: “如果翻译成功,则扫描程序将前进经过匹配的输入。” 啊,但是如果翻译是什么 不是 成功的?在这种

  • EDIT应该返回true或false,但它的抛出错误

  • 问题内容: 下面的代码询问用户他/她想要多少个赛车手。 如果在代码中输入数字,则代码会跳出循环,并且程序的其余部分可以正常运行;但是,当我输入诸如“ awredsf”之类的内容时,它应该捕获该异常,并且确实如此。它没有连续提示用户,而是连续循环,这对我来说没有意义。 连续循环时,程序打印如下: 多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车

  • 问题内容: 我有一个文件需要读取,打印出整数,捕获异常并继续显示下一个整数,依此类推,直到不再有整数。 该文件包含:12 5 sd 67 4 cy 我希望它显示: 12 5 输入错误 67 4 输入错误 但是,它只给我12、5,后面是输入错误,然后停止。我尝试将所有内容放入while循环中,并且由于输入异常而无休止地循环。 我缺少什么,以便循环继续读取下一个int,依此类推? 问题答案: try

  • 本文向大家介绍如何捕获 setTimeout 异常相关面试题,主要包含被问及如何捕获 setTimeout 异常时的应答技巧和注意事项,需要的朋友参考一下 No description provided.