【发布时间】:2020-12-28 21:05:18
【问题描述】:
在下面的Java代码中
Scanner input = new Scanner(System.in); //Cmd1
int i1,i2; //Cmd2
i1 = input.nextInt(); //Cmd3
System.out.println("value of i1 is "+ i1); //Cmd4
i2 = input.nextInt(); //Cmd5
System.out.println("value of i2 is "+ i2); //Cmd6
String s1; //Cmd7
input.nextLine(); //Cmd8
s1 = input.nextLine(); //Cmd9
System.out.println("value of s1 is "+ s1); //Cmd10
我在控制台中得到以下输出
<myinput> 1
<output> value of i1 is 1
<myinput> 2
<output> value of i2 is 2
<myinput> firstString
<output> value of s1 is firstString
enter 键。我尝试了tab,多个tab,space,但它一直在等待并且没有移动到下一个命令
查看Scanner is skipping nextLine() after using next() or nextFoo()? 的答案,我们必须添加Cmd8 的原因是因为nextInt() 一直读取输入直到\n,将输入发送到程序并将\n 放回输入流前面.现在,当“Cmd8”中的 nextLine() 开始读取它时,它在输入流的开头找到\n,没有任何前面的字符串,它假定用户没有输入任何内容,因此将空字符串作为输入并转到Cmd9。
我的疑问是因为 nextInt() 也读取到 \n(根据我的经验暗示 Cmd3 一直等到我按下 enter)为什么 Cmd5 等待我的输入。它还应该在输入流的开头找到\n,并假设我没有输入任何内容并将空整数作为输入(类似于Cmd8 的行为方式)。这里发生了什么?
【问题讨论】:
-
是什么让你相信
nextInt()停在\n? -
请edit您的问题包括您在运行此程序时按下的键盘键的确切顺序。还包括您从应用程序中获得的输出。
-
@GarvitArora 当您按下
enter时,您输入的行是“发送”到您的java 应用程序,而不是之前。因此,当您输入数字时,这些输入尚未发送到您的 Java 应用程序,因此您的 Java 应用程序仍在等待您的第一个输入。 -
@Progman 抱歉,请您详细说明一下。我从您的评论中了解到的是,当我按“输入”时,它会将我的输入“发送”到程序并创建未消耗的 \n 字符。但是 nextInt 在“发送”命令而不是 \n 处停止读取。所以 nextInt(i2) 的输入在技术上是
\n + <valueEntered>直到 "send" ,但由于它跳过空格它只存储。这是正确的理解吗? -
@GarvitArora 你有什么问题/问题/问题?很难理解你想问什么。请edit您的帖子添加您所要求的详细说明。
标签: java