我想知道你是否可以帮助我解决这个问题,我已经坚持了一天试图解决这个问题。基本上我想要做的是有一个包含数组数组的列表。
我有这个初始化
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)
相同的值答案 0 :(得分: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约定。 Classe名字是用大写字母写的,用大写字母开头;变量和方法应以小写字母开头。循环应该在for:for( int run = 0;... )
内声明循环计数器。对于类字段,请避免使用public
;代码getter和setter访问私有类字段。
答案 1 :(得分:0)
您可以使用数组和迭代器的组合来完成工作,
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]);
}
}
}
}
}