为什么 next() 方法停止无限循环?

假设我有这个代码:


 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() 如何防止控制台不断打印出错误消息?


智慧大石
浏览 171回答 2
2回答

叮当猫咪

您的循环处于条件 ;但是您的检查它是否特别具有.如果没有在 中调用,当挂起的令牌不是 nothing 时,将消耗它;从而引起无限循环。您只需使用挂起的令牌。Scanner.hasNext()ifintnext()elseintkey01.next()

一只名叫tom的猫

如果实现无限循环 (),Scanner.next() 将在扫描程序没有其他元素时引发 NoSuchElementException。此异常将防止无限循环。while(true)Elliot的答案解释了为什么next()消耗了待处理的令牌;然后,如果您的循环中没有其他令牌(不是无限的,因为它具有获得false的条件)。但这不是您在内联评论中提出的问题...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java