我无法在java中重置二维数组。我有一个接受二维数组的类。我要做的是复制现有数组,编辑该副本,在该类的实例中使用该副本,并将该数组重置为原始数组的副本,所有这些都不需要修改原始数组。如果需要更多信息,请询问。提前致谢!
public Iterable<Board> neighbors(){
Stack<Board> neighbors = new Stack<Board>();
for (int i = 0; i < N; i++){
for (int j = 0; j < N; j++){
if (tiles[i][j] == 0){
int [][] copy = new int[N][N];
System.arraycopy(tiles, 0, copy, 0, tiles.length);
if (i != 0){
exch(copy, i, j, i - 1, j);
neighbors.push(new Board(copy));
copy = null;
System.arraycopy(tiles, 0, copy, 0, tiles.length);
}
if (i <= N - 2){
exch(copy, i, j, i + 1, j);
neighbors.push(new Board(copy));
copy = null;
System.arraycopy(tiles, 0, copy, 0, tiles.length);
}
if (j != 0){
exch(copy, i, j, i, j - 1);
neighbors.push(new Board(copy));
copy = null;
System.arraycopy(tiles, 0, copy, 0, tiles.length);
}
if (j <= N - 2){
exch(copy, i, j, i, j + 1);
neighbors.push(new Board(copy));
copy = null;
System.arraycopy(tiles, 0, copy, 0, tiles.length);
}
}
}
}
return neighbors;
}
我将代码更改为上面显示的代码但是我收到了此错误
Exception in thread "main" java.lang.NullPointerException
at java.lang.System.arraycopy(Native Method)
at Board.neighbors(Board.java:74)
at Board.main(Board.java:136)
答案 0 :(得分:2)
请记住,在Java中,多维数组实际上是引用其他数组的数组。在Java内部,数组只能有一个维度。
要复制数组的内容,可以使用System.arraycopy
()方法。请注意,对于多维数组,这只会将顶级数组的引用复制到相同的内部数组,所以事情要复杂一些:
int[][] copy = new int[original.length][]; // new top-level array of same size
for (int i = 0; i < copy.length; i++) {
copy[i] = new int[original[i].length]; // new inner array of same size
System.arraycopy(original[i], 0, copy[i], 0, original[i].length); // copy values
}
答案 1 :(得分:0)
int [][] copy = tiles;
这不是你制作数组副本的方式,在上面提到的代码中copy
只是对tiles Array
对象的另一个引用。
int[] src = new int[]{1,2,3,4,5};
int[] dest = new int[5];
System.arraycopy( src, 0, dest, 0, src.length );
如果您更改src
,dest
将保持不变