0

我创建了一个方法,将读取的数字放入 a中,每个输入文件NumberArray总共创建 2个。NumberArrays我在NumberRow用“!!!!!!”标记的行上创建了一个对象数组。我将 read double 放入数组中。但是,当我阅读这些数组时,numberRow[0]是不正确的;属于 in 的所有值numberRow[1]都在那里,并且 in 的值numberRow[1]是正确的。可能有一个简单的解决方案,但我真的不明白这里出了什么问题。

Unit[] unitArray = new Unit[dataset.numberOfRecords];
    double[] emptyDoubleArray = new double[dataset.numberOfRecords];
    for(int x = 0; x<dataset.numberOfVariables; x++){
        numberRow[x] = new NumberRow(emptyDoubleArray);
    }
    for(int i = 0; i<dataset.numberOfRecords; i++){
        String label = in.next();
        double[] elementsPerUnit = new double[dataset.numberOfVariables];
        for(int k = 0; k<dataset.numberOfVariables; k++){
            double misc = in.nextDouble();
        !!!!!   numberRow[k].NumberArray[i] = misc;
            elementsPerUnit[k] = misc;
        }
        unit = new Unit(label, elementsPerUnit);
        unitArray[i] = unit;
    }
    unitRow = new UnitRow(unitArray);
    out.print(Arrays.toString(numberRow[0].NumberArray));
}
4

1 回答 1

1

数组是 Java 中的对象。也就是说,它们不是按值复制和传递的(如int等),它们是按引用传递的(如 Object、String...)

如果你创建一个数组new并将它传递给两个对象,仍然只有一个数组(你只使用new过一次,这样想)。当一个对象编辑数组时,数组的单个副本已被编辑,另一个对象可以看到 的编辑。

解决方案是,如果它应该与所有其他数组不同,则创建一个新数组。

编辑:您在这里创建一个数组(注意new

double[] emptyDoubleArray = new double[dataset.numberOfRecords];

这一个数组被传递给所有 NumberRows (注意,否new

numberRow[x] = new NumberRow(emptyDoubleArray);

因此,如果我编辑任何 NumberRow 的数组,它会在所有 NumberRows 中看到。

于 2013-06-05T01:21:53.370 回答