java - 在 while 循环中处理从 Scanner 读取整数时出错

标签 java

我 try catch 异常并让它重复,但它只是创建了一个无限循环,然后使程序崩溃......为什么要这样做?难道我的捕获有问题吗?

我浏览了网络和 stackoverflow,只能找到与我想要实现的目标无关的答案。

        boolean bError = true;
        System.out.println("How many players");
        do
        {
            try
            {
                PLAYERS = input.nextInt();

                if(PLAYERS > 5)
                {
                    System.out.println("maximum of 5");
                }//if
                else
                {
                    bError = false;
                }

            }
            catch(InputMismatchException e)
            {
                System.out.println(e);
                bError = true;
            }

        }while(bError && PLAYERS > 5);

最佳答案

如果您输入无效数字,它会进入无限循环,因为无效 token 仍然保留在流中,并且 nextInt() 会一遍又一遍地尝试获取它。

您必须从流中获取数据。

您可以做的一件事是使用 nextLine() 代替,然后显式尝试将返回的 String 解析为整数(例如使用 Integer.parseInt( ))。

您可以做的另一件事是在异常处理程序中调用 input.next() (或 input.nextLine()),以读取(并丢弃)垃圾输入。如果默认设置不能满足您的要求,您可能需要调整 Scanner 分隔符才能让 next() 为您工作。

关于java - 在 while 循环中处理从 Scanner 读取整数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22393156/

相关文章:

java - 如何在 Swing 中实现分层 "selection tree"? (或 : is there an existing implementation? )

java - 通过鼠标中键捕获粘贴操作

java - 使用 XPATH 读取 XML 中的重复 block 并以特定格式进行格式化

java - 与大量规则进行实时消息匹配

java - 使用 "array-contains"查询 Cloud Firestore 社交媒体结构

java - Android:如何以编程方式从提供的 HTTPS URL 下载 SSL 证书?

java - 删除框架的标题栏并保留调整大小机制 - Java

java - 当 hive.execution.engine 值其 tez 时出现 NoSuchMethodError

java - 突破java中的递归方法

java - 了解jboss框架-URL