gpt4 book ai didi

java - 数组值在循环外更改 - Java

转载 作者:太空宇宙 更新时间:2023-11-04 11:49:36 25 4
gpt4 key购买 nike

我有一个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/

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