为什么要复制数组

时间:2016-04-11 16:30:56

标签: java arrays

我需要帮助,因为我看不出我的问题所在。我有功能交换,它看起来像这样:

public static void swapping(int[] curr, Integer i, Integer j, Integer k, Integer l, int z, int dist) {
    int tmp;
    int[] tmpCurr = curr;
    if (i >= 0 && j >= 0 && k < 0 && l < 0) {
        tmp = tmpCurr[i];
        tmpCurr[i] = tmpCurr[z];
        tmpCurr[z] = tmp;
        nodesHM.put(1, tmpCurr);
        for(int s = 0; s<tmpCurr.length; s++)
            System.out.println(tmpCurr[s]);

        tmpCurr = curr;
        tmp = tmpCurr[j];
        tmpCurr[j] = tmpCurr[z];
        tmpCurr[z] = tmp;
        nodesHM.put(2, tmpCurr);
        for(int s = 0; s<tmpCurr.length; s++)
            System.out.println(tmpCurr[s]);
    }
}

我,j,k,我告诉我要用z交换什么。所以如果我把那个somethig设为-1就意味着我不想交换它。喜欢这个案例k和l。

我从主叫它,就像这样:

public static void main(String[] args) {
    swapping(ourStartState, 3, 7, -1, -1, 6, 5);
}

private static final int[] ourStartState = { 1, 2, 3, 4, 5, 6, 0, 7, 8 };

它应该写给我:1,2,3,0,5,6,4,7,8和1,2,3,4,5,6,7,0,8

但它给了我1,2,3,0,5,6,4,7,8和1,2,3,0,5,6,7,4,8

我哪里错了? 感谢

1 个答案:

答案 0 :(得分:0)

每当复制数组或对象时,只需创建对数组中元素的另一个引用。 因此,当你执行tmpcurr = curr时,你创建了另一个curr数组的引用,你在curr中所做的任何更改都会影响tmpcurr,反之亦然。 如果你在tmpcurr数组中交换元素,那么curr的元素也会被交换。

当您再次交换元素时,您将从已交换的数组进行交换。

这将有助于您How do I copy an object in Java?