我正在尝试根据用户输入设置数组,但我有一个主要问题。这是我的代码:
Scanner myScanner = new Scanner(new BufferedInputStream(System.in));
System.out.println("Please enter your text");
ArrayList myArray = new ArrayList();
while (myScanner.hasNext()){
myArray.add(myScanner.nextLine());
for (int i = 0; i <myArray.size() ; i++) {
System.out.println(myArray.get(i));
}
}
当我插入
a
b
c
我得到了
a
a
b
还有更好的方法来打印我的阵列吗?
编辑:
当我像这样更改我的代码时
while (myScanner.hasNext()){
myArray.add(myScanner.nextLine());
break;
}
for (int i = 0; i <myArray.size() ; i++) {
System.out.println(myArray.get(i));
}
结果我得到a
。
答案 0 :(得分:3)
每次进行while
循环时,都会打印整个数组。在while
循环的第一次迭代中,for
循环打印出a
,第二次通过while
循环,for
循环打印出a
1}}(再次)和b
。
将for
循环移出while
循环以获得预期输出,如下所示:
while (myScanner.hasNext()){
myArray.add(myScanner.nextLine());
} // end of while
for (int i = 0; i <myArray.size() ; i++) {
System.out.println(myArray.get(i));
}
答案 1 :(得分:2)
每次从扫描仪获取下一行时,它会将数组大小增加一。因此,输入字母表后,您将获得a,b,c,d,e...
等等。
每次输入后,for循环输出整个数组。因此,第一次数组将有a
,第二次有a,b
,依此类推。如果你继续,你的输出将以这种格式a,a,b,a,b,c,a,b,c,d...
继续。您之前没有输出a,b,c
的原因是因为它正在等待您的while循环的myScanner.hasNext()
条件。
希望这有帮助,请随时要求澄清。
答案 2 :(得分:0)
发生重复是因为您试图一遍又一遍地打印ArrayList myArray的所有值。因此,当用户输入A时,myArray将存储A然后for循环打印A,然后在下一行,当用户输入B,myArray = A,B时,for循环打印A和B,依此类推。将for循环放在while循环之外,获取用户的所有输入,让用户完成所有输入,你必须有一种方法让用户离开循环,如类型&#39; Q&#39;退出。
答案 3 :(得分:0)
其他人回答了第一个问题,所以我将回答第二个问题:打印ArrayList没有客观的“更好”的方法。但是这里的循环更简洁:
myArray.forEach(System.out::println);