我有以下问题。我正在尝试显示display arrayList的所有元素,但我只能看到最后一项重复次数与ArrayList中的元素数量一样多。
import java.util.ArrayList;
import java.util.Iterator;
public class PurebaArrayList {
public static void main(String[] args) {
ArrayList<PuntoDouble> puntos = new ArrayList<>();
PuntoDouble p = new PuntoDouble();
for(int cont = 0; cont< 100; cont++){
p.setX(cont);
p.setY(cont);
puntos.add(p);
}
System.out.println(puntos.toString());
}
}
public class PuntoDouble{
private double x;
private double y;
public PuntoDouble(double x, double y) {
this.x = x;
this.y = y;
}
public PuntoDouble(){
}
public double getX() {
return x;
}
public void setX(double x) {
this.x = x;
}
public double getY() {
return y;
}
public void setY(double y) {
this.y = y;
}
@Override
public String toString() {
return "PuntoDouble{" + "x=" + x + ", y=" + y + '}';
}
}
由于
答案 0 :(得分:0)
您需要为添加到列表中的每个条目创建一个新的PuntoDouble
。目前,您只需添加一个您修改的PuntoDouble
个实例。
因此,请将代码更改为:
for(int cont = 0; cont< 100; cont++){
PuntoDouble p = new PuntoDouble();
p.setX(cont);
p.setY(cont);
puntos.add(p);
}
答案 1 :(得分:0)
你是字面上,在数组的100个元素中添加相同的PuntoDouble
。如果您希望它们彼此不同,则需要为每个创建一个new
。
答案 2 :(得分:0)
对于调试,稍微更改100到3并为每次迭代添加以打印puntos
中的元素。
// adds to ArrayList
for(int cont = 0; cont< 10; cont++){
p.setX(cont);
p.setY(cont);
System.out.println("[add]" + p);
puntos.add(p);
}
// iterates ArrayList puntos' elements
for(PuntoDouble pd : puntos){
System.out.println("[contain]" + pd);
}
debug output lines:
[add]PuntoDouble{x=0.0, y=0.0}
[add]PuntoDouble{x=1.0, y=1.0}
[add]PuntoDouble{x=2.0, y=2.0}
[add]PuntoDouble{x=3.0, y= 3.0}
[contain]PuntoDouble{x=9.0, y=9.0}
[contain]PuntoDouble{x=9.0, y=9.0}
[contain]PuntoDouble{x=9.0, y=9.0}
您所做的是创建PuntoDouble
对象p
并通过调用默认构造函数来启动它。在for循环中,p
的值会修改,但p
的引用从未更改,因此您将相同的对象添加到ArrayList中100次,所有这些添加的对象都引用相同的地址内存(new
一个对象,在for循环之前),其中值x为99.0,y为99.0(最后添加的值)
你应该做的是每次迭代创建一个新对象。
for(int cont = 0; cont< 100; cont++){
puntos.add(new PuntoDouble(cont, cont));
}