当前位置: 首页 > 面试题库 >

在try-catch块中捕获InputMidmatchException时发生无限While循环

公羊学义
2023-03-14
问题内容

我一直使我的代码陷入无限的while循环中。

没什么可提高的,但是我无法终生解决!

有人请帮忙

我有幸只是重新创建了特定的错误,而没有我实际程序中所有的if语句。

    package bs;

    import java.util.InputMismatchException;
    import java.util.Scanner;

    public class bs {

        public static void main(String[] args) {

            Scanner sc = new Scanner(System.in);

            boolean continueVar = true;

            while (continueVar) {

                try {
                    System.out.println("Enter Something");
                    int input = sc.nextInt();

                } catch (InputMismatchException i) {
                    System.out.println("What the f***?");
                    continueVar = true;
                }
            }


        }
    }

捕获输入不匹配异常时,将发生无限循环。我认为这至少会要求用户重新输入他们的输入,但与其这样做,不如继续这样做:

    run:
    Enter Something
    df
    What the f***?
    Enter Something
    What the f***?
    Enter Something
    What the f***?

它的行为就像只是忽略扫描仪对象sc ?!


问题答案:

没有扫描程序不会被跳过,它只是从输入的开头开始。从JavaDoc:

如果翻译成功,则扫描程序将前进经过匹配的输入。

这意味着如果转换失败,扫描仪将不会前进。因此,您必须使用just手动跳过不正确的输入next()

编辑:您可能想hasNextInt()在尝试读取输入之前进行检查。



 类似资料:
  • 问题内容: 当我在 while循环中 使用 try和catch 块时,我的程序有一个无限 循环 。 当我输入一个整数时,它运行良好并要求另一个输入,但是当我输入一个字符时,它将进入无穷循环。为什么会这样呢? 问题答案: 遇到无效输入时,由于nextInt()不使用无效令牌,因此程序进入无限循环。因此,导致该异常的任何令牌都将保留在该位置,并在下次尝试使用nextInt()时继续引发异常。 可以通过

  • 问题内容: 我试图确保用户输入是整数,但是当我使用下面的代码时,我只会得到语句的无限循环。关于如何改进的任何建议? 问题答案: 不会消耗无效的输入,因此它将反复尝试读取相同的无效值。要解决此问题,您需要通过调用或接受任何值来显式使用它。 顺便说一句,为使您的代码更整洁并避免昂贵的操作(如创建异常),您应使用。 这是组织代码的方法

  • 下面的代码询问用户他/她想要多少个赛车手。

  • 帮助,我对java完全陌生,我正在尝试创建一个循环,该循环将要求用户输入一个数字。如果用户输入的数字以外的任何内容,我想捕获异常并再次尝试获取正确的输入。我用一段时间循环完成了此操作,但是它不会在错误后为用户提供输入任何内容的机会,它循环了除该循环之外的所有内容。请帮助我了解什么是错的,以及正确的方法...谢谢。这就是我所拥有的:

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

  • 我目前正在处理Eclipse中的一些Java代码,并试图在do-time语句中使用try捕获语句。我目前的代码如下: 当我输入任何数字时,代码工作正常,并将循环请求另一个输入,当输入10时,代码按预期停止(因为猜测值等于rand)。但是,如果我输入任何非整数的内容(例如“否”),则会出现一个无限循环,其中输出打印以下内容: "你的猜测必须是整数" “输入您的猜测:您的猜测必须是整数。” “输入您的