1

私はこのJavaコードを持っています:

boolean[][] defaultBoard = {{false, false, false},
                            {false, false, false},
                            {false, false, false}};
Board board = new Board(defaultBoard);
Board nextBoard = new Board(defaultBoard);
nextBoard.getBoard()[1][5] = true;
board.printBoard();

printBoard:

public void printBoard() {
    for (boolean row[] : board) {
        for (boolean cell : row) {
            System.out.print( cell ? "#" : "." );
        }
        System.out.println();
    }
    System.out.println();
}

しかし、それは戻ります

...
.#.
...

それは私にそれを考えさせnextBoardboard同じメモリアドレスを持っています。nextBoard私の質問は次のとおりです。編集されたときにnextBoard編集されないように、のコピーを作成するにはどうすればboardよいですか?

4

5 に答える 5

0

この場合、ボードにサイズを指定してアレイ ベースを作成させます。

class Board {
    final boolean[] board;

    public Board(int width, height) {
        board = new[width][height];
    }

    public boolean[][] getBoard() { return board; }

    public void set(int x, int y, boolean value) { board[x][y] = value; }
}

コードは次のようになります

Board board = new Board(3, 3);
Board nextBoard = new Board(3, 3);
nextBoard.set(1, 2, true); // the last element is 2 not 5
board.printBoard();
于 2013-05-11T21:50:04.490 に答える
0

オブジェクトに渡す必要があるたびに、新しい新しい配列を作成して、オブジェクトが同じ配列ではなく新しい配列を参照できるようにする必要があります。

于 2013-05-13T06:23:52.683 に答える