我有一个2D ArrayList作为:
private ArrayList<double[]> allNeuronsParams = new ArrayList<double[]>();
我试图在循环内为其赋值:
for (int i = 0; i < getTotalNeuronNum(); i++) {
allNeuronsParams.add(defaultParamCase1); //this is fine
setNeuronParam(i, 0, (double)NMassociatedNum); //this is fine
setNeuronParam(i, 1,extractedNeuronTypes[i]); //this is the problem
}
问题出在循环中我的最后一个任务:
setNeuronParam(i, 1,extractedNeuronTypes[i]);
该行通过
extractedNeuronTypes
函数将allNeuronsParams
数组中的值分配给setNeuronParam(row, index, value)
2-D ArrayList每行的第二个索引。当我在循环内打印值时,一切都正确。但是,当我在循环后放置一条打印语句时,这些值不再正确。
打印的值都是3,这是
extractedNeuronTypes
数组的默认值。在我的for循环之前,我调用另一个函数,打开一个文件,然后将新值读入该数组-不是所有索引都更改,而是部分索引值更改。例如,值从默认值{3,3,3,3}更改为新值{3,2,1,3}。但是由于某些原因,只能访问{3,3,3,3}。我再次在循环内打印值,并将正确的数字{3,2,1,3}分配给二维arrayList。
但是这是循环后我得到的-粗体数字是错误的,其他一切都很好:
我的参数是:1.0、3.0,-1.0,-2.345、1.0、1432345.1,-13456.0,
-1.4,2.000003,2.000003,2.000003,2.000003
我的参数是:1.0、3.0,-1.0,-2.345、1.0、1432345.1,-13456.0,
-1.4,2.000003,2.000003,2.000003,2.000003
我的参数是:1.0、3.0,-1.0,-2.345、1.0、1432345.1,-13456.0,
-1.4,2.000003,2.000003,2.000003,2.000003
我的参数是:1.0、3.0,-1.0,-2.345、1.0、1432345.1,-13456.0,
-1.4,2.000003,2.000003,2.000003,2.000003
有人可以在这里看到我的错吗?
谢谢。
最佳答案
看起来您的所有行都引用同一数组(defaultParamCase1)。
而不是做
allNeuronsParams.add(defaultParamCase1);
您应该创建defaultParamCase2的深层副本,并将该副本添加到Arraylist中