为什么扫描仪需要额外的输入才能看到空行?

Why does it take additional input for scanner to see an empty line?

public class Test1 {
   public static void main(String[] args) {
      System.out.println("Give me a word: ");
      Scanner console = new Scanner(System.in);
      ArrayList<String> arr = new ArrayList<>();
      boolean found = true;
      
      while (console.hasNextLine() && found) {
         String line = console.nextLine();
         
         if (line.equals("")) {
            found = false;
         } else {
            arr.add(line);
         }
      }
     
      System.out.println("You said: ");
      
      for (int index = 0; index < arr.size(); index++) {
         System.out.println(arr.get(index)); 
      } 
   }
}

我想在用户输入两次时打印用户输入的内容,但是由于某种原因这需要输入三个输入。当我在 while 循环的条件下删除 console.hasNextLine 语句时,它工作得很好。为什么会这样?

console.hasNextLine() 阻塞应用程序流并等待接收输入。

第 1 次输入 - 找到单词并找到仍然 == true

第 2 次输入 - 未找到单词,已找到设置为 == false

第三次输入 - 是必需的,因为您的布尔值是按排列顺序计算的。所以首先它会调用 console.hasNextLine() 并允许用户提供输入。然后它将检查是否找到 == true/false 这将 == false 并会跳出循环。

一个简单的解决方案是将您的条件重新安排为

found  && console.hasNextLine()