继续能够使用扫描仪输入

时间:2013-07-14 06:58:30

标签: java

为什么在下面的代码中,您能够连续在扫描仪中输入数字?我觉得代码会在输入double时导致无限循环,因为

  

userInput.hasNextDouble()

总是如此,因为userInput的值在整个循环中都不会改变。

我想解释为什么while条件不会导致无限循环。

 public class Testing
    {
        public static void main(String[] args) 
        { 
            System.out.println("Enter numbers: ");
            Scanner userInput = new Scanner(System.in);
            int currentSize = 0;
            while (userInput.hasNextDouble()) 

            {

                    double nextScore = userInput.nextDouble();

                    currentSize++;


            }
            System.out.println(currentSize); 
            }




        }

3 个答案:

答案 0 :(得分:1)

扫描仪类基本上扫描在输入到输入流中的标记。当您调用hasNextDouble()或任何hasNext方法时,它将尝试查看流中的下一个标记。在返回值之前它会等到令牌存在,然后调用nextDouble()将获取该令牌并从流中清除它,这样当你回到hasNextDouble()时它会等到你输入另一个token {1}}进入流。

答案 1 :(得分:0)

hasNextDouble()是一种指示是否已输入双精度的方法。如果在该代码中,用户输入的不是双精度内容,例如charboolean,则代码将跳出循环并打印currentSize。更好的事情是这样的:

        System.out.println("Enter numbers: ");
        Scanner userInput = new Scanner(System.in);
        int currentSize = 0;
        char choice = 'c';
        while (choice != 't') 

        {

                double nextScore = userInput.nextDouble();

                currentSize++;
                System.out.println("Enter \"c\" to enter more numbers, or \"t\" to exit.");
                choice = userInput.nextChar();
        }
        System.out.println(currentSize); 
        }

答案 2 :(得分:0)

来自Scanner

的javadoc
  

next()和hasNext()方法及其原始类型的伴随方法(例如nextInt()和hasNextInt())首先跳过与分隔符模式匹配的任何输入,然后尝试返回下一个标记。 hasNext和next方法都可能阻止等待进一步输入。 hasNext方法块是否与其关联的下一个方法是否将阻止无关。

因此,如果你没有输入一个双精度数,你就会立即退出那个循环。