У меня проблема с XOR для элемента массива java, вот мой код:
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();
}
@ Mario_1412 По определению все единичные биты числа равны единице. Поэтому, если мы исключаем это число с самим собой, все одни биты становится равным нулю.
Спасибо ... Думаю, я нашел причину .. a [index] ^ a [index] = 0. Но это так странно ... почему сам элемент в массиве xor выдаст 0 ... в любом случае, я думаю, что ваше решение лучше. Спасибо, мужик