我在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);
}
}
}
答案 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 ...");
}