2

今日はとても面白い問題があります。配列を変更しようとしていますが、メソッドは呼び出されていない別の配列を変更します。

a)トラブルの原因となっている方法の一部

public static void place2(String output, int position,furniture furniture_array[], char room_grid[][]) {

    int i=0;
    int j=0;

    furniture_array[position].setXY(i, j);
    char grid1[][] = room_grid;
    char grid2[][] = room_grid;
    char grid3[][] = room_grid;
    char grid4[][] = room_grid;
    pasteToArray(i, j, grid1, furniture_array[position]);
}

b)pasteToArray

これは、input_arrayを受け取る非常に単純なメソッドであり、この配列では、オブジェクト値である配列を通過します。

public static char[][] pasteToArray(
    int x, int y, char input_array[][], furniture furniture_to_be_placed) {

    char[][] result=input_array;

    for (int i = 0; i <= furniture_to_be_placed.getSize(); i++) {
        for (int j = 0; j <= furniture_to_be_placed.getSize(); j++) {
            result[x + i][y + j] = furniture_to_be_placed.furn_grid[i][j];
        }
    }
    return result;
}

私の質問は何ですか?

  1. 入力A、B、結果CのメソッドがDを変更するのはなぜですか?(相対名)

自分で解決するために私がすでに行ったこと:-

  1. デバッグコード-問題を引き起こしているメソッドを見つけました
  2. 25分間の無力な叫びには罵倒が含まれます
  3. グローバル変数をチェック
  4. すべてのメソッド入力の名前を相対的なニュートラル名に変更します

誰かがこれから私を助けることができますか?

4

1 に答える 1

5

grid1、grid2、grid3、およびgrid4は、すべて同じ2次元配列への参照です。1つで値を変更すると、すべての値が変更されます。

このコード...

char grid1[][] = room_grid;
char grid2[][] = room_grid;
char grid3[][] = room_grid;
char grid4[][] = room_grid;

room_gridの4つのコピーを作成するのではなく、同じメモリブロックへの4つの異なる参照を作成します。

于 2013-01-04T19:13:50.637 に答える