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

09-26 22:55