Java: случайная перестановка без импорта java .util - PullRequest
0 голосов
/ 02 марта 2020

Существует множество различных инструкций для случайной перестановки в Inte rnet, но все они используют библиотеки. Есть ли способ сделать случайную перестановку без использования встроенной библиотеки ? Я знаю, как генерировать случайные числа, используя Math.random(). Связана ли генерация случайной перестановки с Math.random()? Тасование выглядит так сложно для меня.

Моя цель состоит в том, чтобы, если я запускаю программу с помощью 'java randompermutation 3', программа возвращает либо 1,2,3, либо 1,3,2, либо 3,1,2, либо 3, 2,1, или 2,3,1, или 2,1,3

Ответы [ 2 ]

1 голос
/ 02 марта 2020

Не могли бы вы сделать что-то похожее на приведенный ниже пример

public class Main {
    public static void main(String[] args) throws Exception {
        Integer[] input = new Integer[] { 1, 2, 3 };
        Integer[] shuffleInput = shuffle(input);

        for (int i=0; i<shuffleInput.length; i++) {
            System.out.print(shuffleInput[i]);
        }
    }

    public static Integer[] shuffle(Integer[] input) {
        Integer[] inputCopy = input.clone();;
        Integer[] output = new Integer[input.length];

        for (int i=0; i<output.length; i++) {
            // Find and get a random element
            int randPicker = (int)(System.currentTimeMillis() % inputCopy.length);
            output[i] = inputCopy[randPicker];

            // Remove selected element from copy
            Integer[] aux = new Integer[inputCopy.length - 1];
            System.arraycopy(inputCopy, 0, aux, 0, randPicker);
            if (inputCopy.length != randPicker) {
                System.arraycopy(inputCopy, randPicker + 1, aux, randPicker, inputCopy.length - randPicker - 1);
            }
            inputCopy = aux;
        }

        return output;
    }
}

Этот код принимает в качестве ввода список Integer любого размера и возвращает список со смешанными значениями.

Если в списке всегда будет 3 числа, это может быть более простая версия.

РЕДАКТИРОВАНИЕ: В этой версии не используется Math.random() или любая другая java.util.

0 голосов
/ 02 марта 2020

Один алгоритм сортировки массива основан на сортировке выбора и называется выбором случайного выбора. Go через массив и для каждого индекса выберите случайный индекс, следующий за ним, и поменяйте местами эти два индекса. Поскольку это выглядит как домашнее задание, я воздержусь от предоставления какого-либо реального кода, но это решение.

...