Java扫描程序问题,在while循环中打印

时间:2015-11-27 17:50:27

标签: java while-loop

此代码将整数作为输入,直到输入非整数。然后打印最高和最低输入。原样,代码可以工作。

从初始打印语句到while循环的第一次完整迭代,为什么不打印"输入一个整数:"不止一次(第一次在循环之前和in.hasNextInt()之后再次返回true)?

import java.util.Scanner;

    public class MaxMinPrinter
    {
        public static void main(String[] args)
        {
            Scanner in = new Scanner(System.in);
            int max = Integer.MIN_VALUE;
            int min = Integer.MAX_VALUE;

            System.out.print("Enter an integer: ");

           while (in.hasNextInt()){
               System.out.print("Enter an integer: ");
               int x = in.nextInt();
               if (x > max){max = x;}
               if (x < min){min = x;}
           }
           System.out.println(max);
           System.out.println(min);

        }
    }

我的印象是这个代码应该i)打印,然后ii)要求输入进入while循环,然后iii)第二次打印和iv)移动扫描仪&#34;光标&#34;到下一个标记并可能分配新的最大值或最小值。为什么第一次迭代不会发生第二次打印?或者我误解了扫描仪类的用法?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

hasNextInt()的javadoc:

 * Returns true if the next token in this scanner's input can be
 * interpreted as an int value in the default radix using the
 * {@link #nextInt} method. The scanner does not advance past any input.

所以,基本上程序正在等待hasNextInt()的输入。 如果你在调试模式下运行并在while循环的第一行保持调试点,你会看到它在第一次输入后命中调试点。