为什么我的 java Scanner.nextLine() 代码有时会跳过一行?
Why does my java Scanner.nextLine() code sometimes skip a line?
我想了解为什么我的 java 代码没有按我预期的那样运行。
我想打印一次问题,等待用户输入他们的答案,然后根据答案决定是循环还是继续。
当我 运行 下面的代码时,问题被打印了两次,循环没有停止并在第一次 运行 之后等待用户输入。
Scanner input = new Scanner(System.in);
String answer = "";
while (!answer.equals("Yes") && !answer.equals("No")){
System.out.println("abc1");
System.out.println("Do you want to quit the game? Answers: y/n");
System.out.println("abc2");
System.out.println("abc3");
answer = input.nextLine();
System.out.println("abc4");
}
我认为我不需要第二个 .nextLine(),因为第一个已经消耗了输入行的末尾 (\n)。但是为了进行试验,我修改了代码,添加了一个额外的 .nextLine()(如下所示)。这个新代码有两个问题:
- 在第一个 运行(第一个循环)中,代码跳过第一个 .nextLine() 并在第二个 .nextLine() 等待用户输入(我可以说是这种情况,因为“abc3 " 在我作为用户可以输入任何内容之前打印出来。
- 从第二个循环开始,代码打印“abc2”,等待用户输入,打印“abc3”,然后再次等待用户输入。
Scanner input = new Scanner(System.in);
String answer = "";
while (!answer.equals("Yes") && !answer.equals("No")){
System.out.println("abc1");
System.out.println("Do you want to quit the game? Answers: y/n");
System.out.println("abc2");
answer = input.nextLine();
System.out.println("abc3");
answer = input.nextLine();
System.out.println("abc4");
}
我进一步修改了代码(answer = input.nextLine();
vs answer = input.nextLine();
)并且仍然得到相同的行为。
Scanner input = new Scanner(System.in);
String answer = "";
while (!answer.equals("Yes") && !answer.equals("No")){
System.out.println("abc1");
System.out.println("Do you want to quit the game? Answers: y/n");
System.out.println("abc2");
input.nextLine();
System.out.println("abc3");
answer = input.nextLine();
System.out.println("abc4");
}
我哪里错了?
非常感谢任何建议!
找到错误的地方了!我在代码的其他地方留下了 .nextInt()
,但忘记了我需要消耗行尾 (\n
)。我的(第一个).nextLine()
完成了 .nextInt()
遗漏的内容,但我没有意识到这正在发生。
我想了解为什么我的 java 代码没有按我预期的那样运行。
我想打印一次问题,等待用户输入他们的答案,然后根据答案决定是循环还是继续。
当我 运行 下面的代码时,问题被打印了两次,循环没有停止并在第一次 运行 之后等待用户输入。
Scanner input = new Scanner(System.in);
String answer = "";
while (!answer.equals("Yes") && !answer.equals("No")){
System.out.println("abc1");
System.out.println("Do you want to quit the game? Answers: y/n");
System.out.println("abc2");
System.out.println("abc3");
answer = input.nextLine();
System.out.println("abc4");
}
我认为我不需要第二个 .nextLine(),因为第一个已经消耗了输入行的末尾 (\n)。但是为了进行试验,我修改了代码,添加了一个额外的 .nextLine()(如下所示)。这个新代码有两个问题:
- 在第一个 运行(第一个循环)中,代码跳过第一个 .nextLine() 并在第二个 .nextLine() 等待用户输入(我可以说是这种情况,因为“abc3 " 在我作为用户可以输入任何内容之前打印出来。
- 从第二个循环开始,代码打印“abc2”,等待用户输入,打印“abc3”,然后再次等待用户输入。
Scanner input = new Scanner(System.in);
String answer = "";
while (!answer.equals("Yes") && !answer.equals("No")){
System.out.println("abc1");
System.out.println("Do you want to quit the game? Answers: y/n");
System.out.println("abc2");
answer = input.nextLine();
System.out.println("abc3");
answer = input.nextLine();
System.out.println("abc4");
}
我进一步修改了代码(answer = input.nextLine();
vs answer = input.nextLine();
)并且仍然得到相同的行为。
Scanner input = new Scanner(System.in);
String answer = "";
while (!answer.equals("Yes") && !answer.equals("No")){
System.out.println("abc1");
System.out.println("Do you want to quit the game? Answers: y/n");
System.out.println("abc2");
input.nextLine();
System.out.println("abc3");
answer = input.nextLine();
System.out.println("abc4");
}
我哪里错了?
非常感谢任何建议!
找到错误的地方了!我在代码的其他地方留下了 .nextInt()
,但忘记了我需要消耗行尾 (\n
)。我的(第一个).nextLine()
完成了 .nextInt()
遗漏的内容,但我没有意识到这正在发生。