0

我正在做这样的算法:

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。这里有什么问题?

4

2 回答 2

1

这是你的罪魁祸首:

int[][] p = m;

一旦你这样做,pm引用同一个确切的对象,因为 Java 中的数组是引用对象。对 ' 内容的任何更改p都将反映在 中m,因为pm是单个对象的两个不同名称。

如果您需要p成为 的副本m,则应明确执行。这是一个答案的链接,向您展示了它是如何完成的。

于 2012-09-20T01:17:46.647 回答
0

我认为你应该使用:

int [][] p = new int[m.length][];
for(int i = 0; i < m.length; i++)
   p[i] = m[i].clone();

而不是int[][] p = m;

这样pm引用两个不同的对象

于 2012-09-20T01:19:30.243 回答