小编典典

在while循环中处理从Scanner读取int时出错

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);

阅读 282

收藏
2020-11-26

共1个答案

小编典典

如果您输入无效的数字,则会陷入无休止的循环,因为无效的令牌仍留在流中,并且nextInt()不断尝试以获取它。

您将不得不获得数据流。

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

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

2020-11-26