Scanner scanner = new Scanner(System.in);
int value = scanner.nextDouble();
int doubleValue = scanner.nextInt();
String line = scanner.nextLine();
我知道答案,这条线将等于' \ n'什么时候执行最后一个语句但是为什么?
有人可以帮我解释一下吗?
答案 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
希望这有帮助。