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

Java:使用Scanner in.hasNextInt()进行无限循环

张银龙
2023-03-14
问题内容

我正在使用以下代码:

while (invalidInput)
{
    // ask the user to specify a number to update the times by
    System.out.print("Specify an integer between 0 and 5: ");

    if (in.hasNextInt())
    {
        // get the update value
        updateValue = in.nextInt();

        // check to see if it was within range
        if (updateValue >= 0 && updateValue <= 5) 
        { 
            invalidInput = false; 
        } 
        else 
        {
            System.out.println("You have not entered a number between 0 and 5. Try again.");
        }
    } else
    {
        System.out.println("You have entered an invalid input. Try again.");
    }
}

但是,如果我输入“ w”,它将告诉我“您输入的输入无效。请重试。” 然后它将进入无限循环,显示文本“指定0到5之间的整数:您输入的输入无效。请重试。”

为什么会这样呢?该程序不是应该等待用户输入并在每次到达该语句时按Enter键:

if (in.hasNextInt())

问题答案:

在最后一个else块中,您需要清除“
w”或来自扫描仪的其他无效输入。您可以通过调用next()Scanner并忽略其返回值来丢弃该无效输入来执行此操作,如下所示:

else
{
      System.out.println("You have entered an invalid input. Try again.");
      in.next();
}


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

  • 你好,有人能解释一下为什么这会形成一个无限循环吗?谢谢!

  • 问题内容: 我一直在使用React 16.7-alpha中的新钩子系统,并且当我正在处理的状态是对象或数组时陷入useEffect的无限循环中。 首先,我使用useState并使用一个空对象启动它,如下所示: 然后,在useEffect中,我再次使用setObj将其设置为空对象。作为第二个参数,我传递了[obj],希望如果对象的 内容 没有更改,它也不会更新。但是它一直在更新。我猜是因为不管内容如

  • 我想让用户输入一个String和四个整数值,如果用户输入的类型不匹配,我想让程序继续要求用户输入整数值,为什么代码会一直循环,如果用户插入了错误的类型,永远不会等待用户输入?

  • 我有一个我研究过的问题,但我没有找到任何令人信服的答案。如果您想每2小时左右循环运行一个程序,当然,我知道任何人都可以使用windows调度程序或类似的东西,是否会在无限循环中运行程序并每2小时左右使用“继续”语句来防止它中断(StackOverflow)?

  • 问题内容: 请看下面的Java 无限循环。它导致其下面的语句的编译时错误。 以下相同的无限循环可正常工作,并且不会发出任何错误,其中我只是用布尔变量替换了条件。 同样在第二种情况下,循环之后的语句显然不可访问,因为布尔变量为true,但编译器根本没有抱怨。为什么? 编辑:显然,以下版本的卡在无限循环中,但是即使循环中的条件始终存在,因此循环下面的语句也不会对该语句下的语句发出任何编译器错误,因此循