此代码将整数作为输入,直到输入非整数。然后打印最高和最低输入。原样,代码可以工作。
从初始打印语句到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;到下一个标记并可能分配新的最大值或最小值。为什么第一次迭代不会发生第二次打印?或者我误解了扫描仪类的用法?
感谢您的帮助。
答案 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循环的第一行保持调试点,你会看到它在第一次输入后命中调试点。