Java数组重复

时间:2017-09-04 23:07:27

标签: java

我正在尝试根据用户输入设置数组,但我有一个主要问题。这是我的代码:

    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

4 个答案:

答案 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);