在这里,我想使数组重复“改编”我的小块阵列,并提出一些修改它,问题是,当我做出改变(法邻居)它适用于原数组“砖”太当我只更改复制数组时,为什么我的原始数组被更改?
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 –