在数组列表中,使用
添加新变量时 pointList.add(i , coord);
添加新变量,并用新值替换现有值。 如何阻止这些替换变量?
for(int i=0;i<coordinateArray.length();i++)
{
brokenArray= coordinateArray.getJSONObject(i);
x=brokenArray.getInt("x");
y=brokenArray.getInt("y");
Log.d("x", " "+i+ " "+x );
Log.d("y", " "+i+ " "+y );
coord.set(x, y);
pointList.add(i , coord);
Log.d("pointList", pointList.toString());
}
答案 0 :(得分:6)
根据您提供的代码,您每次都在同一个对象上使用coord.set(x, y)
。将对象添加到List
不会复制它。
Java按值传递引用,而不是按值传递对象;当您致电pointList.add(i, coord)
时,您要将coord
对象的引用添加到列表中,而不是coord
对象的新副本。
相反,每次循环时,必须创建一个新的Point
或Coordinates
或任何对象。您无法像在此处一样重复使用coord
对象。
答案 1 :(得分:1)
这是错误。
coord.set(x, y);
您正在将循环中的值设置为同一对象。
在循环内创建coord对象并添加它。
for(int i=0;i<coordinateArray.length();i++)
{
brokenArray= coordinateArray.getJSONObject(i);
x=brokenArray.getInt("x");
y=brokenArray.getInt("y");
Log.d("x", " "+i+ " "+x );
Log.d("y", " "+i+ " "+y );
Coordinate coord = new Coordinate ();
coord.set(x, y);
pointList.add(i , coord);
Log.d("pointList", pointList.toString());
}
答案 2 :(得分:0)
这解决了问题:)
for(int i=0;i<coordinateArray.length();i++)
{
brokenArray= coordinateArray.getJSONObject(i);
x=brokenArray.getInt("x");
y=brokenArray.getInt("y");
Log.d("x", " "+i+ " "+x );
Log.d("y", " "+i+ " "+y );
Point coord = new Point();
coord.set(x, y);
pointList.add(i , coord);
coord=null;
Log.d("pointList", pointList.toString());
}