Onl*_*ies -1 java loops input while-loop
我正在看这个话题,我发现这个Java 在空行后停止阅读
我对在我之前引用的另一个 StackOverflow 页面中编写的下一个代码有疑问:
while (!sc.nextLine().equals("")){
text[i] = sc.nextLine();
i++;
}
Run Code Online (Sandbox Code Playgroud)
我使用类似的东西来测试它,这是这段代码:
List<String> list = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
while(!scanner.nextLine().equals(""))
{
list.add(scanner.nextLine());
}
list.forEach(s -> System.out.println(s));
Run Code Online (Sandbox Code Playgroud)
所以这个想法是,读取一些输入(字符串)将它们存储到一个列表中,当该行为空时停止循环。
但是这个输入的结果:
1 2 3 4
这是输出:
2 4
当然,我期待这一点,因为当您在 while 语句中进行比较时,您会调用 nextLine 方法。所以下次你调用它时,进入 while,你会调用第二个,所以下一行。
我在看是否有人知道解决这个问题的好方法?因此,您正在读取输入,存储它们,如果该行为空,则停止循环。
谢谢你。
小智 5
每次调用 nextLine()-Method 时,扫描器都会有效地从输入中读取一行!这意味着您的程序每隔一行就会跳过一次!
为避免这种情况,将读取的行分配给变量,然后将此变量的内容添加到您的列表中。例如像这样:
List<String> list = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
String line;
while (!(line = scanner.nextLine()).equals("")) {
list.add(line);
}
list.forEach(s -> System.out.println(s));
Run Code Online (Sandbox Code Playgroud)