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

标签 java

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

相关文章:

java - 如何从 JList 的给定索引处删除多个元素?

java - 如何在 Wicket 中创建可靠的调色板

java - 在 BlueJ 中添加库

java - Spring Web MVC 对非绑定(bind)参数的错误处理

java - Android:使用资源初始化消息时 ProgressDialog 崩溃

java - Mongodb聚合查询批量返回

未创建 javafx Pane

java - Java 中的字符串数组 - 声明固定长度,将值传递给构造函数并添加到它们中

java - JPA : How to define @NamedEntityGraph for 3 levels?

java - 打印通过 Spring PropertyPlaceholderConfigurer 设置的所有属性