2012-05-30 21 views
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()); 
     } 

回答

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

是,截拳道你不同 - 不同的指標設置單個對象。每次你設置XY它會取代在同一obejct –

+0

請檢查日誌貓結果編輯問題 –

+0

@ jeet.chanchawat我沒有得到你在說什麼。 –

6

根據您所提供的代碼,你每次使用coord.set(x, y)在同一對象上。將對象添加到List不會複製它

Java按值傳遞引用,而不是按值傳遞對象;當您致電pointList.add(i, coord)時,您正在將coord對象的引用添加到列表中,而不是coord對象的新副本。

相反,你必須創建PointCoordinates或任何通過每次循環的對象。你不能像你在這裏做的那樣重複使用這個coord對象。

+0

「Java的經過值的參考,而不是價值的物品」謝謝:) –

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