我需要帮助,因为我看不出我的问题所在。我有功能交换,它看起来像这样:
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
我哪里错了? 感谢
答案 0 :(得分:0)
每当复制数组或对象时,只需创建对数组中元素的另一个引用。 因此,当你执行tmpcurr = curr时,你创建了另一个curr数组的引用,你在curr中所做的任何更改都会影响tmpcurr,反之亦然。 如果你在tmpcurr数组中交换元素,那么curr的元素也会被交换。
当您再次交换元素时,您将从已交换的数组进行交换。