所以我遇到了这行代码的问题。
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);
}
所以我想要的是userPath List有每个坐标, [(1,1),(2,1),(3,1)......]
相反,我一直在努力 [(1,1)]第一次迭代 [(2,1),(2,1)]第二次迭代 [(3,1),(3,1),(3,1)]第三次迭代有没有办法可以解决这个问题,因为我发现List的每个元素都存储了point object movingPoint,当移动点更改时,包含它的每个元素都是如此。
答案 0 :(得分:2)
你必须在循环的每次迭代中重新创建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);
}
如果您不重新创建它,由于您保留了引用,您基本上会将相同的对象多次添加到列表中。因此对对象movingPoint
的任何修改都会影响列表中的所有对象,因为它们对同一对象都具有相同的引用。