Array List用最后一个替换所有元素

时间:2015-07-07 19:30:51

标签: java arraylist

我在java中有这三个类,我遇到了数组列表的问题。为什么数组列表用最后一个条目替换所有元素?

arraylist.java

import java.util.ArrayList;

public class arraylist {
    public ArrayList<Circle> circles = new ArrayList<Circle>();
}

circle.java

public class Circle {
    public int x;
    public int y;
}

run.java

public class run {

    public static void main(String[] args) {
        arraylist ar=new arraylist();
        Circle c = new Circle();
        Scanner s = new Scanner(System.in);
        for (int i = 0; i <= 2; i++)
        {
            c.x = s.nextInt();
            c.y = s.nextInt();
            boolean status = ar.circles.add(c);
            if (status)
                System.out.print("added to circles ...");
        }
        System.out.print("########################################");
        for (Circle c2:ar.circles)
        {
            System.out.print("\nx=" + c2.x + "   y=" + c2.y);
        }
    }
}

3 个答案:

答案 0 :(得分:9)

Circle循环开始之前,您只创建了一个for。您每次循环都添加相同的Circle对象。此外,您每次都要更改Circle的属性,以便最后一个圆的属性是在一个对象中仍然可见的属性。

相反,在Circle循环内创建一个新的for对象,每次迭代一个。

Scanner s = new Scanner(System.in);
for (int i = 0; i <= 2; i++)
{
    Circle c = new Circle();

答案 1 :(得分:2)

你必须搬家

Circle c = new Circle();

for循环内。现在,只有一个“圈子”,每次拨打c.x = s.nextInt();c.y = s.nextInt();时,圈子的坐标都会更新。

答案 2 :(得分:1)

您继续覆盖Circle的同一个实例(即c)。相反,每次要将元素添加到列表时,都应创建一个新实例:

Scanner s = new Scanner(System.in);
for (int i = 0; i <= 2; i++)
{
    Circle c = new Circle(); // new instance!
    c.x = s.nextInt();
    c.y = s.nextInt();
    boolean status = ar.circles.add(c);
    if (status)
        System.out.print("added to circles ...");
}