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没问题。