2016-03-27 20 views
2

次のように私はクラスを定義しました:オブジェクトをJavaでコピーするにはどうすればよいですか?

Public class Board{ 
    public static final int SIZE = 4; 
    private static char[][] matrix = new char[SIZE][SIZE]; 

    public Board(){ 
     clear();//just fills matrix with a dummy character 
    } 

    public void copy(Board other){//copies that into this 
     for(int i = 0; i < SIZE; i++){ 
      for(int j = 0; j < SIZE; j++){ 
       matrix[i][j] = other.matrix[i][j]; 
      } 
     } 
    } 

    //a bunch of other methods 
} 

は、だからここに私の問題だ:私はmyBoard.copy(otherBoard)のように、コピーを作成しようとすると、1枚のボードに加えた変更は、他に影響を与えます。個々の原始要素をコピーしましたが、matrixへの参照は両方のボードで同じです。私は要素をコピーしていると思った、なぜポインタは同じですか?これを修正するにはどうすればよいですか?

答えて

2

変更

private static char[][] matrix = new char[SIZE][SIZE]; 

private char[][] matrix = new char[SIZE][SIZE]; 

staticは、この配列のインスタンスが1つしかないことを意味しています。

5

matrixstaticです。したがって、すべてのBoardオブジェクトは同じです。

staticを削除して、それぞれBoardに独自のマトリックスがあるようにします。

private static char[][] matrix = new char[SIZE][SIZE]; <-- Because of this line 
matrix[i][j] = other.matrix[i][j];      <-- These two are the same. 
+1

ありがとう、私はばかげています。私のCS教師は恒星ではありませんが、あなたは – LeoShwartz

+0

です@LeoShwartzありがとうございますが、あまりにも名誉です。 ; D –

関連する問題