Arraylist正在沿着新添加的元素打印先前添加的元素

use*_*936 2 java arraylist

我希望我的arraylist打印这样的元素:

1894年,

1895年,

1896年,

等等..

但我得到1894年,1895年,1896年

     ArrayList<Integer> years = new ArrayList<Integer>();
    int j;

    for (j = 1894; j < 2014; j++)

    {
        years.add(j);
        //comboyears.addItem(j);

    }
    System.out.println(years);  
Run Code Online (Sandbox Code Playgroud)

Chr*_*ian 5

你实际上是在打印years,它会打印String出来toString()ArrayList.

您正在多次获取该数组,因为该print语句位于for循环内部,因此每次迭代它将打印该数组(最近添加了该元素).要只打印一次数组,请移动print循环外部.

如果要打印每个元素,[]可以尝试以下方法:

for (Integer i : years) {
    System.out.print(i + ", "); // This will print a comma at the end
}
Run Code Online (Sandbox Code Playgroud)

或者这个,以避免打印额外的逗号,:

for (int i = 0; i < years.size() - 1; i++) {
    System.out.print(years.get(i) + ", ");
}
System.out.println(years.get(years.size() - 1));
Run Code Online (Sandbox Code Playgroud)

输出:

1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, ...
Run Code Online (Sandbox Code Playgroud)

编辑:

您还可以toString在创建新实例时覆盖该方法ArrayList:

ArrayList<Integer> years = new ArrayList<Integer>()
{
    @Override
    public String toString()
    {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < size() - 1; i++) {
            sb.append(get(i));
            sb.append(", ");
        }
        sb.append(get(size() - 1));
        return sb.toString();
    }
};
Run Code Online (Sandbox Code Playgroud)

因此,您可以System.out.println(years);按照自己的方式打印阵列.

编辑2:

既然你编辑的问题,我建议你不这样做,你可以这样做增加一个新的行字符\ n或改变printprintln:

for (int i = 0; i < years.size() - 1; i++) {
    System.out.println(years.get(i) + ", "); // or concatenate with ", \n"
}
System.out.println(years.get(years.size() - 1));
Run Code Online (Sandbox Code Playgroud)

如果你是覆盖toString方法,ArrayList你也可以附加一个换行符.用`替换`sb.append(",")

sb.append(", \n")
Run Code Online (Sandbox Code Playgroud)