0

私は次のようなアルゴリズムを実行しています:

public int[][] moveLeft(int m[][], int[] index){
    Puzzle x = new Puzzle(m);
    System.out.println(x);
    int[][] p = m;
    int temp = p[index[0]][index[1]];
    p[index[0]][index[1]] = p[index[0]][index[1]-1];
    p[index[0]][index[1]-1] = temp;
    return p;
}

具体的には、特定の値の位置を変更して新しいマトリックスを返すことですが、デバッグ中は、次のように変更した場合でも、値「m」も変化することに気付きました。値p。ここで何が問題になっていますか?

4

2 に答える 2

1

これがあなたの犯人です:

int[][] p = m;

これを行うpm、Java の配列は参照オブジェクトであるため、まったく同じオブジェクトを参照します。とは 1 つのオブジェクトの 2 つの異なる名前であるため、のコンテンツへの変更pは に反映されます。mpm

pのコピーである必要がある場合mは、明示的に行う必要があります。これがどのように行われるかを示す回答へのリンクです。

于 2012-09-20T01:17:46.647 に答える
0

使用する必要があると思います:

int [][] p = new int[m.length][];
for(int i = 0; i < m.length; i++)
   p[i] = m[i].clone();

int[][]の代わりにp = m;

と が2 つの異なるオブジェクトpm参照するようにします。

于 2012-09-20T01:19:30.243 に答える