[英]Items in list are Overwritten when adding new items
我想知道您是否可以解決這個問題,我在解決這一問題上呆了一天。 所以基本上我想做的是有一個包含一個數組數組的列表。
我有這個初始化
List<double[][]> points = new ArrayList<double[][]>();
我以這種方式添加元素:
points.add(existing.Foods);
我的beeColony類包含我要添加的數據:
public class beeColony{
double Foods[][]=new double[FoodNumber][D];
....
}
這是我聲明它的實例的方式:
public beeColony existing=new beeColony();
這是一段代碼:
for(run=0;run<existing.runtime;run++)
{
for (iter=0;iter<existing.maxCycle;iter++)
points.add(existing.Foods);
}
發生的是,當我輸出列表的所有項目時,它僅包含最后添加的項目。
例如:
Foods = {(0,0), (1,1), (2,2), (3,3)}
points.add(Foods);
Foods = {(4,4), (5,5), (6,6), (7,7)}
points.add(Foods);
據我了解,points.get(0)[0]應計為0,0,依此類推,points.get(1)[0]應包含4,4,依此類推。 但是發生的是points.get(0)也具有與points.get(1)相同的值
像ArrayList<X>
這樣的集合包含對X對象的引用 ,就像字符串的一端,另一端與對象本身(即數據所在的位置)“綁定”在一起。
對於double[][]
這樣的數組也是如此。
您要做的是重復復制並存儲參考端,但在另一端有一個相同的double[][]
。 您可以更改該數組的內容,但是所有存儲的字符串結尾均指向同一數組對象。
您必須創建該數組的新副本以容納不同的數組值。 如果創建另一個BeeColony,它將具有另一個食物陣列。 否則,請使用new double[m][n]
並復制值。 這是這樣的:
double[][] d = { {1,2}, {3,4}, {5,6} };
// create the vector of (still missing) rows:
double[][] copy = new double[d.length][];
for( int row = 0; row < d.length; ++row ){
// create another row of appropriate length:
copy[row] = new double[d[row].length];
// copy the element values
System.arraycopy( d[row], 0, copy[row], 0, d[row].length );
}
PS:您應該遵循Java約定。 班級名稱以駝峰大寫字母開頭; 變量和方法應以小寫字母開頭。 循環應在for: for( int run = 0;... )
聲明循環計數器。 避免在課程領域public
; 代碼獲取器和設置器以訪問私有類字段。
您可以結合使用數組和迭代器來完成工作,
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
public class listerr {
static int getrandom(){
Random r = new Random();
int next = r.nextInt(100);
return next;
}
static double[][] getarr(){
double[][] arr = {{getrandom(),getrandom()}, {getrandom(),getrandom()},
{getrandom(),getrandom()}, {getrandom(),getrandom()}};
return arr;
}
public static void main(String[] args) {
List<double[][]> points = new ArrayList<double[][]>();
for(int run=0;run<3;run++)
{
double[][] arr = getarr();
points.add(arr);
}
Iterator itr = points.iterator();
while(itr.hasNext()){
double[][] dbl = (double[][]) itr.next();
for (int i=0;i<4;i++)
{ for (int j=0;j<2;j++){
System.out.println(dbl[i][j]);
}
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.