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)毎回同じオブジェクトで使用しています。オブジェクトをに追加してList も、そのコピーは作成されません

Javaは、オブジェクトを値で渡すのではなく、参照を値で渡します。を呼び出すと、オブジェクトの新しいコピーではなく、オブジェクトへのpointList.add(i, coord)参照がリストに追加されます。coordcoord

代わりに、ループを通過するたびに、新しいオブジェクトまたはその他のオブジェクトを作成する必要があります。ここで行っている方法でオブジェクトを再利用することはできません。PointCoordinatescoord

于 2012-05-30T12:58:08.573 に答える
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());
    }
于 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 に答える