gpt4 book ai didi

java - 添加新项目时列表中的项目会被覆盖

转载 作者:行者123 更新时间:2023-12-01 11:55:34 25 4
gpt4 key购买 nike

我想知道你是否可以帮助我解决这个问题,我被困了一天试图解决这个问题。所以基本上我想做的是有一个包含数组的数组的列表。

我有这个初始化

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

我的理解是这样的point.get(0)[0] 应包含 0,0 等,points.get(1)[0] 应包含 4,4 等。但发生的情况是,points.get(0) 也具有与 points.get(1) 相同的值

最佳答案

类似 ArrayList<X> 的集合包含对 X 个对象的引用,就像字符串的一端“绑定(bind)”到对象本身,即数据所在的位置。

对于 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对于类字段;代码 getter 和 setter 来访问私有(private)类字段。

关于java - 添加新项目时列表中的项目会被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28469855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com