繁体   English   中英

数组中的Java元素XOR

[英]java element XOR in array

我对java数组元素的XOR有问题,这是我的代码:

public int[] shuffle() {
    int[] copy = new int[original.length];
    System.arraycopy(original, 0, copy, 0, original.length);
    for (int i = 0; i < copy.length; i++) {
        int s = i + (int) (Math.random() * (copy.length - i));
        copy[i] = copy[i] ^ copy[s];
        copy[s] = copy[i] ^ copy[s];
        copy[i] = copy[i] ^ copy[s];
    }
    return copy;
}

我只是想交换数组中的元素。 结果似乎很奇怪,例如[4,5,0,6,0,1,0] ...我对此完全感到困惑。

XOR交换算法

copy[i] = copy[i] ^ copy[s];
copy[s] = copy[s] ^ copy[i];
copy[i] = copy[i] ^ copy[s];

要么

copy[i] ^= copy[s];
copy[s] ^= copy[i];
copy[i] ^= copy[s];

但是我更喜欢Collections.shuffle(List)并将int[]传递给方法并使其静态; 喜欢,

public static int[] shuffle(int[] original) {
    List<Integer> al = IntStream.of(original).boxed().collect(Collectors.toList());
    Collections.shuffle(al);
    return al.stream().mapToInt(Integer::intValue).toArray();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM