这个条件语句(来自Udacity&#9简介到Java编程|问题集4 |问题#20)是如何工作的?
import java.util.Scanner;
public class MonthPrinter {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Enter a month number (1 through 12) ");
if (!in.hasNextInt()) {
System.out.println("Not an integer. Terminating");
} else {
int theMonthNumber = in.nextInt();
if (!(theMonthNumber >= 1 && theMonthNumber <= 12)) {
System.out.println("Number must be 1 through 12");
} else {
Month test = new Month(theMonthNumber);
System.out.print(test.getMonthName() + " " + test.getNumberOfDays());
}
}
}
}
第一个if (!in.hasNextInt())
检查用户输入是否为整数。如果它不是整数,则main方法打印Not an integer. Terminating
。这完全合情合理。
但是,如果用户输入一个整数,代码将进入else
语句,其中下一行代码为int theMonthNumber = in.nextInt();
当程序运行并且我提供一个整数作为输入时,我没有提示输入另一个输入。我认为hasNextInt()
方法和nextInt()
方法都应该请求用户输入。因此,我应该被提示总共两个输入(假设我提供一个整数)。当我干这个场景时,我输入一个整数3.这通过了if(!hasNextInt())
检查。
在声明的逻辑流程中我缺少什么?
答案 0 :(得分:2)
我在想,hasNextInt()方法和nextInt()方法都应该请求用户输入。
否。 Scanner.hasNextInt()
Javadoc说(部分)
如果使用
nextInt()
方法将此扫描器输入中的下一个标记解释为默认基数中的int值,则返回true。扫描仪不会超过任何输入。
最后一句话告诉你不消费int
。
答案 1 :(得分:0)
函数to
仅用于检查输入值。它不会消耗输入。会发生什么,它将推进扫描仪并检查数据,但之后它将返回到它之前的位置。从技术上讲,扫描仪的位置没有改变。这就是为什么它没有提示下一次输入。
只有hasNextInt()
才会使用这些数据。调用此功能后,扫描仪将前进到下一个位置。