为什么扫描仪需要额外的输入才能看到空行?
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()
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()