Java 为什么next()方法停止无限循环?
假设我有以下代码:Java 为什么next()方法停止无限循环?,java,Java,假设我有以下代码: public static void main(String[] args) { Scanner key01 = new Scanner(System.in); int input; System.out.println("Please enter a int."); while (key01.hasNext()) { if(key01.hasNextInt()) {
public static void main(String[] args)
{
Scanner key01 = new Scanner(System.in);
int input;
System.out.println("Please enter a int.");
while (key01.hasNext())
{
if(key01.hasNextInt())
{
input = key01.nextInt();
System.out.println("Thanks for input!");
}
else
{
System.out.println("You must enter an Int");
key01.next(); //Why does this statement prevent an infinite loop?
//That statement prevents
//the program from constantly printing "you must enter an int"
}
}
}
key01.next()如何防止控制台不断打印错误消息?您的循环处于条件
Scanner.hasNext()
;但是您的if
检查它是否有一个int
。如果不调用else
中的next()
,当挂起令牌不是int
时,任何东西都不会消耗它;从而导致无限循环。您的key01.next()
只会使用挂起的令牌。如果您实现了无限循环(while(true)
),当您的扫描仪没有其他元素时,Scanner.next()将抛出一个NoSuchElementException。此异常将防止无休止的循环
Elliot的回答解释了next()为什么会使用挂起的令牌;然后,如果在循环中没有额外的标记(不是无限的,因为它有一个条件为false)。但这并不是你在内联注释中所要求的…如果你在
key01
有下一个标记时循环,并且从不读取下一个标记。。。