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

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

雷浩思
2023-03-14
问题内容

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

我环顾了网络和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);

问题答案:

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

您将不得不获得数据流。

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

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



 类似资料:
  • 问题内容: 我一生无法理解为什么我无法在while循环之外阅读postPrioity。我尝试过“ export postPrioity =“ 500””仍然无法正常工作。 有任何想法吗? -或在计划文字中- 输出:(我在files.txt中只有3个文件名) 问题答案: 管道操作员创建一个子外壳,请参阅BashPitfalls和BashFAQ。解决方案:不要使用,反正毫无用处。

  • 问题内容: 在下面的代码中,我希望循环在+ + =时立即退出。但是,使用语句进行测试表明它一直持续到循环完成为止。我尝试过,然后在语句集中进行设置,但这会导致无限循环。我认为使用然后设置可能有效,但也可以一直运行到循环结束为止。什么是最优雅,最快的退出方式?谢谢。 问题答案: 该循环将只匹配条件时,当控制返回到它,即循环完全执行。因此,这就是即使满足条件也不会立即退出程序的原因。 但是,如果条件没

  • 感谢您的建议这是我第一次使用stackoverflow,因为我对编程相当陌生。我遇到的问题是,在执行while循环之后,我的程序没有请求名称。它似乎不在这一行之后执行。System.out.print(“输入减肥者的姓名:”);字符串名称=input.nextLine();有人能解释一下我可能错过了扫描器实用程序的使用吗。

  • 我有这个程序,每次我检查控制台的输入时,根据提供的输入,我决定是继续还是终止程序。 这是第一次,它工作得很好,但在第二次迭代中,我没有发现任何异常。 为什么它在不请求输入参数的情况下抛出异常。 这是控制台输出。

  • 问题内容: 该算法应将3个整数带入ArrayList。如果输入的不是整数,则将出现提示。当我执行代码时,该子句会执行,但是程序会陷入无限循环。有人可以指导我朝正确的方向前进,我感谢您的帮助。:-D 问题答案: 这是因为当使用下一个int读取并且失败时,仍然包含键入的内容。然后,当重新进入do- while循环时,尝试再次使用相同的内容对其进行解析。 您需要使用以下内容“冲洗” 内容: 笔记: 您可

  • 出现的问题是,当用户确实输入了一个正数时,它仍然忽略输入,并要求用户再次输入一个正整数。我想我只是没有正确退出循环,但我不确定是如何退出的。