Java 使用异或进行数组元素交换时的坑 返回0的原因

 在使用异或交换数组值的时候,可以使用异或,不用临时变量。

但是这个方法当i与j相等时,相当于始终对一个数自己进行异或,我们知道两个一样的数异或结果为0

假如i==j  则

a[i] = a[i] ^ a[j]; //结果为0 则此时a[i]=a[j]=0
a[j] = a[i] ^ a[j]; // = 0 ^ 0 = 0;
a[i] = a[i] ^ a[j]; // = 0

所以最后结果为0

添加一行判断问题解决。

private void swap(int[] a, int i, int j) {
    if (i == j){return;}//关键
    a[i] = a[i] ^ a[j];
    a[j] = a[i] ^ a[j];
    a[i] = a[i] ^ a[j];
    System.out.println("swap:" + a[j] + " <-> " + a[i]);
}
发布了39 篇原创文章 · 获赞 11 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/he37176427/article/details/97799869