XOR элемента java в массиве

У меня проблема с 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] ... Я совершенно сбит с толку этим ..

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
120
1

Ответы 1

Алгоритм замены 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();
}

Спасибо ... Думаю, я нашел причину .. a [index] ^ a [index] = 0. Но это так странно ... почему сам элемент в массиве xor выдаст 0 ... в любом случае, я думаю, что ваше решение лучше. Спасибо, мужик

Mario_1412 04.11.2018 05:09

@ Mario_1412 По определению все единичные биты числа равны единице. Поэтому, если мы исключаем это число с самим собой, все одни биты становится равным нулю.

Elliott Frisch 04.11.2018 05:14

Другие вопросы по теме