使用扫描仪检索线条

时间:2015-07-04 14:41:25

标签: java

我坚持这个问题 6)假设您输入34.3,ENTER键,57.8,ENTER键,789,ENTER键。分析以下代码。

Scanner scanner = new Scanner(System.in); 
int value = scanner.nextDouble();
int doubleValue = scanner.nextInt();
String line = scanner.nextLine();

我知道答案,这条线将等于' \ n'什么时候执行最后一个语句但是为什么?

有人可以帮我解释一下吗?

2 个答案:

答案 0 :(得分:1)

扫描程序会根据需要读取尽可能多的令牌以获取它的下一个输出,然后将所有剩余的令牌留在那里进行检查。 nextInt()不需要换行符,因此将其留在令牌流中。当你调用nextLine()时,它会查看令牌流,看到换行符,然后返回。

答案 1 :(得分:1)

让我们通过陈述来打破这一陈述。

Scanner scanner = new Scanner(System.in);
int value = scanner.nextDouble();

系统等待您输入值。

34.3↲

该值读取为34.3但被截断为34,因为它存储为整数。现在执行下一个语句。

int doubleValue = scanner.nextInt();

系统再次等待您输入值。

57.8↲

当您使用scanner.nextInt()时,该值读为57,因此忽略.8。但是缓冲区中仍有一个输入。

String line = scanner.nextLine();

系统现在再次等待输入,然后输入。第一个新行是前一个输入的残余。

↲
789↲

扫描仪首先看到换行符,因此它假定该行已终止。因此,该值读作 \ n

希望这有帮助。