为什么我的 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()(如下所示)。这个新代码有两个问题:

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() 遗漏的内容,但我没有意识到这正在发生。