我有一个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]);
此行通过 setNeuronParam(row, index, value)
函数将 extractedNeuronTypes
数组中的值分配给 allNeuronsParams
2-D ArrayList 每行的第二个索引。
当我在循环内打印值时,一切都是正确的。但是当我在循环后面放置打印语句时,这些值不再正确。
打印的值都是 3,这是 extractedNeuronTypes
数组的默认值。在 for 循环之前,我调用另一个函数,打开一个文件并将新值读入该数组 - 不是针对所有索引,而是部分索引的值发生变化。例如,值从默认值 {3, 3, 3, 3} 更改为新值 {3, 2, 1, 3}。
但由于某种原因,只有 {3, 3, 3, 3} 被访问。我再次在循环内打印值,并将正确的数字 {3, 2, 1, 3} 分配给二维 arrayList。
但是这是循环后我得到的结果 - 粗体数字是错误的,其他一切都很好:
My parameters are: 1.0, 3.0, -1.0, -2.345, 1.0, 1432345.1, -13456.0, -1.4, 2.000003, 2.000003, 2.000003, 2.000003
My parameters are: 1.0, 3.0, -1.0, -2.345, 1.0, 1432345.1, -13456.0, -1.4, 2.000003, 2.000003, 2.000003, 2.000003
My parameters are: 1.0, 3.0, -1.0, -2.345, 1.0, 1432345.1, -13456.0, -1.4, 2.000003, 2.000003, 2.000003, 2.000003
My parameters are: 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
关于java - 数组值在循环外更改 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41985854/