2017-04-02 33 views
0

在這裏,我想使數組重複「改編」我的小塊陣列,並提出一些修改它,問題是,當我做出改變(法鄰居)它適用於原數組「磚」太當我只更改複製數組時,爲什麼我的原始數組被更改?

public class Board { 
    private final int [][] tiles; 
    // construct a board from an n-by-n array of blocks 
    // (where blocks[i][j] = block in row i, column j) 
    public Board(int[][] blocks) { 
     tiles = blocks; 
    }// all neighboring boards 
    public Iterable<Board> neighbors() { 
     Queue<Board> q = new LinkedList<>(); 
     int [][] arr = tiles; 
     // do stuff 
     if (y+1 < n) { 
      int t = arr[x][y]; 
      arr[x][y] = arr[x][y+1]; 
      arr[x][y+1] = t; 
      Board br = new Board(arr); 
      if(!this.equals(br)) { 
       q.add(new Board(arr)); 
      } 
     } 
     return q; 
    } 
} 

感謝您的時間

+0

可能重複的[Java是「通過引用傳遞」還是「傳遞值」?](http://stackoverflow.com/questions/ 40480/is-java-reference-by-value-pass-by-value) – Ravi

+1

這不是傳遞參數或by-value的重複,因爲數組未作爲方法參數 –

+0

傳遞'int [] [] arr = tiles;'你不創建數組的副本,你只需要用不同的指針指向同一個數組。您需要實際創建一個新數組(使用'new'關鍵字),然後遍歷這些切片並將每個項目分配給新數組。你也可以使用'System.arraycopy'參見https://www.tutorialspoint.com/java/lang/system_arraycopy.htm –

回答

1

在Java數組中是對象。您可以使用clone()方法來複制陣列。它將執行淺拷貝 - 它可以很好地與你的int陣列配合使用。

int [][] arr = new int[tiles.length][]; 
for(int i = 0; i < tiles.length; i++) 
    arr[i] = tiles[i].clone(); 
  1. copy a 2d array in java
+0

它仍然改變陣列 –

+0

@AhmadFahmy [你確定嗎?](http://ideone.com/Ec01N5)淺拷貝應該是足夠的。 – csirmazbendeguz

+0

ops看起來像我誤解你..你的答案是正確的謝謝:) –

相關問題