这是我的意思代码:
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(']', ' '));
}
}
我只得到一些输入来触发&#34;我来了!&#34;。 我真的很困惑为什么每隔一秒左右的输入都会被添加到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&#34;字符串&#34;将被打印出来。 这些变化好吗?
答案 0 :(得分:2)
仅添加每一秒输入的原因是其他输入被“退出”检查所消耗。
你应该这样写:
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语句中创建扫描程序将确保它在结束时关闭。