异或运算符的特点是:一个整型[初始值] 异或 另一个整型 得到的还是 初始值。
今天在做个打乱数组内值的循环的时候,用异或来交换两个随机下标的值,输出结果发现却是混乱的。
代码如下:
import java.util.Random;
public class index {
public static void main(String[] args){
//定义一个长度为 101 的整型数组
int[] init = new int[101];
//向数组内初始化数据(为 0-100)
Integer initLen = init.length;
for (int i=0;i<initLen;i++) {
init[i] = i;
}
//打乱数组
Random r = new Random();
for (int x=0;x<1000;x++){
int y = r.nextInt(initLen);
int j = r.nextInt(initLen);
init[y] = init[y] ^ init[j];
init[j] = init[y] ^ init[j];
init[y] = init[y] ^ init[j];
}
printArr(init);
}
/***
* 输出数组
* @param arr
*/
public static void printArr(int[] arr){
Integer arrLen = arr.length;
for (int i=0;i<arrLen;i++) {
System.out.println(arr[i]);
}
}
}
导致问题的原因是:
/***
上面代码中是利用两个随机数做下标,既然是随机那么就有可能出现重复的可能性。如果两个随机数一致,那么就会导致
结果混乱。比如两个随机数都是 10,得到的数组值就是 10。init[10] = init[10] ^ init [10] 其实就是
10 ^ 10; 这时候 int[10] 的值就是 0 了,那么这时候进行反转的时候就是 init[10] = init[10] ^ init[10]
就是 0 ^ 0 得到的还是 0。
**/
thanks~