在這裏,我想使數組重複「改編」我的小塊陣列,並提出一些修改它,問題是,當我做出改變(法鄰居)它適用於原數組「磚」太當我只更改複製數組時,爲什麼我的原始數組被更改?
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;
}
}
感謝您的時間
可能重複的[Java是「通過引用傳遞」還是「傳遞值」?](http://stackoverflow.com/questions/ 40480/is-java-reference-by-value-pass-by-value) – Ravi
這不是傳遞參數或by-value的重複,因爲數組未作爲方法參數 –
傳遞'int [] [] arr = tiles;'你不創建數組的副本,你只需要用不同的指針指向同一個數組。您需要實際創建一個新數組(使用'new'關鍵字),然後遍歷這些切片並將每個項目分配給新數組。你也可以使用'System.arraycopy'參見https://www.tutorialspoint.com/java/lang/system_arraycopy.htm –