2011-03-02 59 views
1

以下内容更改参数chr并结束匹配“交换”二维数组。我看不出它是如何改变的,因为它不在任何计算的接收端。 也有类似的变量,从哪里调用这个方法,哪些方法也以类似的方式改变。二维数组值被更改,但未在Java中明确声明它们

private Character[][] moveLeft(Character[][] chr) { 
    Character[][] swapped = chr; 
    int[] pos = getBlankLocation(chr); //find the blank space 

    //location of blank space in 2d array 
    int row = pos[0]; 
    int col = pos[1]; 
    if (col != 0) { 
     Character temp = chr[row][col - 1]; 
     swapped[row][col - 1] = chr[row][col];    
     swapped[row][col] = temp; 

     return swappedChr; 
    } 
    return null; 
} 

回答

1

你让swappedchr指向同一个对象在内存中。因此,改变一个会改变另一个,因为它们都引用同一个对象。请注意,原始值不是这种情况,例如int

如果您想更换swapped中的值而不影响chr,则需要复制或复制chr。你可以用一个嵌套for循环来复制值,或者你可以使用其中一个辅助方法。

+0

谢谢,入口复印条目是我去的方式。 – Sonak 2011-03-02 04:35:09

+0

随时upvote /接受有用的答案:) – 2011-03-02 04:39:08

1

这是预期的。 Java是按值传递的,但传递给方法的值是Array对象的内存地址。因此,分配:

Character[][] swapped = chr; 

实际上并没有创建一个新的数组。