0

私はガス粒子のシミュレーションに取り組んでいます。

私の問題は、3つの2次元整数テーブルを作成したことです。1つは粒子の圧力値用で、もう2つは粒子の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

これは、2 次元配列の 1 次元のみをコピーするためです。したがって、まだ同じ配列を参照しているため、元の配列で変更しています。

基本的に、ソースオブジェクト[[1,2],[3,4]]があり、コピーを行うと、ポインターを[1,2]新しい[3,4]配列にコピーします。

クローンは浅いコピーを行うので ( Does calling clone() on an array also clone its contents? をチェックしてください)、これは結局、メモリ内の配列のまったく同じインスタンスの別の配列を作成することに戻ります。

于 2013-03-22T13:45:59.590 に答える