Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么next()方法停止无限循环?_Java - Fatal编程技术网

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
有下一个标记时循环,并且从不读取下一个标记。。。