0

我正在对气体粒子进行一些模拟。

我的问题是我制作了 3 个二维整数表。一个用于粒子的压力值,另一个用于描述粒子的 x 和 y 运动。

尽管我制作了arraycopy并克隆它仍然以某种方式设法更改全局表中的值

private void translate() {
    int [][] VectorXBuff = new int[500][500];
    System.arraycopy(VectorX.clone(), 0, VectorXBuff, 0, VectorX.length);
    int [][] VectorYBuff = new int[500][500];
    System.arraycopy(VectorY.clone(), 0, VectorYBuff, 0, VectorX.length);
    int [][] FieldBuff = new int[500][500];
    System.arraycopy(FieldMatrix.clone(), 0, FieldBuff, 0, VectorX.length);

    for (int y = 0; y < FieldMatrix.length; y++){
        for (int x = 0; x < FieldMatrix.length; x++){
            if(FieldBuff[x][y]!= 0 && FieldBuff[x][y]!= 9 ){
                FieldBuff[x + VectorXBuff[x][y]][y + VectorYBuff[x][y]] = Integer.valueOf(FieldBuff[x][y]);
                FieldBuff[x][y] = 0;
                VectorXBuff[x + VectorXBuff[x][y]][y + VectorYBuff[x][y]] = Integer.valueOf(VectorXBuff[x][y]);
                VectorYBuff[x + VectorXBuff[x][y]][y + VectorYBuff[x][y]] = Integer.valueOf(VectorYBuff[x][y]);
                VectorXBuff[x][y] = 0;
                VectorYBuff[x][y] = 0;
            }
        }
    }
}
4

1 回答 1

0

这是因为您只复制二维数组的一维。因此,您仍然引用相同的数组,因此在原始数组中对其进行修改。

基本上,您有一个源对象[[1,2],[3,4]],当您进行复制时,您将指针复制到新数组[1,2]并复制[3,4]到新数组中。

由于克隆做了一个浅拷贝(检查在数组上调用 clone() 是否也克隆它的内容?),这最终恢复为在内存中创建另一个完全相同的数组实例的数组。

于 2013-03-22T13:45:59.590 回答