我正在做这样的算法:
public int[][] moveLeft(int m[][], int[] index){
Puzzle x = new Puzzle(m);
System.out.println(x);
int[][] p = m;
int temp = p[index[0]][index[1]];
p[index[0]][index[1]] = p[index[0]][index[1]-1];
p[index[0]][index[1]-1] = temp;
return p;
}
更具体地说,我要做的是改变某些值的位置并返回新的矩阵,但是当我调试时,我注意到值“m”也会变化,即使是即时通讯对值p进行更改。这有什么不对?
答案 0 :(得分:1)
这是你的罪魁祸首:
int[][] p = m;
执行此操作后,p
和m
引用相同的对象,因为Java中的数组是引用对象。对p
内容的任何更改都将反映在m
中,因为p
和m
是单个对象的两个不同名称。
如果您需要p
成为m
的副本,则应明确执行此操作。以下是a link to an answer,告诉您如何完成。
答案 1 :(得分:0)
我认为你应该使用:
int [][] p = new int[m.length][];
for(int i = 0; i < m.length; i++)
p[i] = m[i].clone();
而不是 int [] [] p = m;
以便p
和m
引用两个不同的对象。