3

在数组列表中,当使用添加新变量时

 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());
        }
4

3 回答 3

6

根据您提供的代码,您coord.set(x, y)每次都在同一个对象上使用。将对象添加到 aList 不会复制它

Java 按值传递引用,而不是按值传递对象;当您调用 时pointList.add(i, coord),您正在向列表中添加对该对象的引用coord,而不是该coord对象的新副本。

相反,您必须每次通过循环创建一个新的Point或任何对象。Coordinates您不能coord像在此处那样重用该对象。

于 2012-05-30T12:58:08.573 回答
1

这是错误。

 coord.set(x, y);

您正在将循环中的值设置为同一个对象。

在循环内创建坐标对象并添加它。

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());
    }
于 2012-05-30T13:00:14.780 回答
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());
        }
于 2012-05-30T13:49:46.217 回答