Java点列表

Java点列表,java,android,arrays,list,loops,Java,Android,Arrays,List,Loops,所以这行代码有问题 private List<PointF> userPath = new ArrayList<PointF>(); pointF movingPoint = new pointF(); pointF initialPoint = new pointF(); initialPoint = (1,1); for (i = 0; i < 5; i++) { movingPoint.x = initialPoint.x + i; movi

所以这行代码有问题

private List<PointF> userPath = new ArrayList<PointF>();
pointF movingPoint = new pointF();
pointF initialPoint = new pointF();
initialPoint = (1,1);

for (i = 0; i < 5; i++)
{
    movingPoint.x = initialPoint.x + i;
    movingPoint.y = initialPoint.y;

    userPath.add(movingPoint);
}
private List userPath=new ArrayList();
pointF movingPoint=新的pointF();
pointF initialPoint=新的pointF();
初始点=(1,1);
对于(i=0;i<5;i++)
{
movingPoint.x=初始点.x+i;
movingPoint.y=初始点.y;
添加(移动点);
}
所以我想让userPath列表有每个坐标, [(1,1)、(2,1)、(3,1)…]

相反,我一直在 [(1,1)]第一次迭代 [(2,1),(2,1)]第二次迭代 [(3,1),(3,1),(3,1)]第三次迭代


有没有办法解决这个问题,因为我知道列表中的每个元素都在存储点对象movingPoint,当移动点发生变化时,包含它的每个元素也会发生变化。

在循环的每次迭代中,您必须重新创建
movingPoint

private List<PointF> userPath = new ArrayList<PointF>();
pointF movingPoint = null; // change here
pointF initialPoint = new pointF();
initialPoint = (1,1);

for (i = 0; i < 5; i++)
{
    movingPoint = new pointF(); // change here

    movingPoint.x = initialPoint.x + i;
    movingPoint.y = initialPoint.y;

    userPath.add(movingPoint);
}
private List userPath=new ArrayList();
pointF movingPoint=null;//在这里换车
pointF initialPoint=新的pointF();
初始点=(1,1);
对于(i=0;i<5;i++)
{
movingPoint=new pointF();//在此处更改
movingPoint.x=初始点.x+i;
movingPoint.y=初始点.y;
添加(移动点);
}

如果您不重新创建它,因为您保留了引用,那么您基本上是将同一对象多次添加到列表中。因此,对对象
movingPoint
的任何修改都会影响列表中的所有对象,因为它们对同一对象都有相同的引用。

+1很好的解释。您还可以添加一个重新创建点的等效方法,即用单个语句
userPath.add(new pointF(initialPoint.x+i,initialPoint.y))替换
for
循环的整个主体@RayToal是的,但是如果OP在这里遇到问题,你的解决方案会吓跑他们:DThanks,这就足够了,@antoh,baby steps是:)@user3337821没问题。