在while循环中处理从Scanner读取int的错误

时间:2014-03-13 23:27:09

标签: java

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

我浏览了网页和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);

1 个答案:

答案 0 :(得分:2)

如果您输入无效的号码,它会进入无限循环,因为无效的令牌仍然留在流上,并且nextInt()一直反复尝试抓取它。

您必须从流中获取数据。

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

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