将多个字符串扫描到 ArrayList 会返回意外结果.(Java,简单,初学者)



这是我的意思:

public class ArrayTest {
private static ArrayList<String> atf() {
ArrayList<String> array = new ArrayList<>();
while(true) {
Scanner i = new Scanner(System.in);
String input = i.next();
System.out.println(input);
array.add(input);
System.out.println("Here i am!");
if(i.next().equals("exit")) {
System.out.println("Cyka");
break;
}
}
return array;
}
public ArrayTest() {
System.out.println(atf().toString().replace('[', ' ').replace(']', ' '));
}
}

我只得到一些输入来触发"我在这里! 这真的让我感到困惑,为什么只有每秒左右的输入会被添加到 ArrayList 中。作为一个完整的初学者,我希望问题不是太明显,你们可以帮助我。 很多问候。


初始反馈后编辑:

public class ArrayTest {
private static ArrayList<String> atf() {
ArrayList<String> array = new ArrayList<>();
Scanner i = new Scanner(System.in);
while(i.hasNext() && !(i.next().equals("exit"))) {
System.out.println(i.next());
String string = i.next();
array.add(string);
}   
i.close();
return array;
}
public ArrayTest() {
System.out.println(atf().toString().replace('[', ' ').replace(']', ' '));
}

每 3 个"字符串"将被打印出来。 变化还好吗?

只添加每秒输入的原因是其他输入被您的"退出"检查消耗。

你应该这样写:

try (Scanner i = new Scanner(System.in)) {
List<String> list = new ArrayList<>();
while (true) {
String next = i.next();
list.add(next);
if ("exit".equals(next)) {
System.out.println("Cyka");
break;
}
}
return list;
}

这里最大的区别是Scanner.next()只调用一次,而不是两次。这就是为什么每个输入都添加到列表中,而您的原始代码"删除"为"退出"检查记录的输入。

在 try 语句中创建扫描程序将确保它在最后也关闭。

最新更新