【问题标题】:Translation of object in matrix矩阵中对象的翻译
【发布时间】:2013-03-22 13:40:17
【问题描述】:

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

我的问题是我制作了 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;
            }
        }
    }
}

【问题讨论】:

    标签: java clone arrays


    【解决方案1】:

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

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

    由于克隆做了一个浅拷贝(检查Does calling clone() on an array also clone its contents?),这最终会恢复为在内存中创建另一个完全相同的数组实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多