Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Как случайно перемешать массив чисел типа Integer?


Автор: TWoVKP 2.7.2009, 14:15
Вообшем такая задача, есть массив целых чисел, скажем так от 1 и до 11!
Массив уже инициализирован числами, заполнение случайными числами в определённом интервале не подходит, так как массив уже заполнен!
Есть ли в Java функция для перемешки массива, ну чтобы те же самые числа в том же самом массиве стояли не попорядку, а в разноброс???

Если нет то подскажите как это реализовать???
 smile 
Буду очень благодарен!
 smile  smile  smile 

Автор: LSD 2.7.2009, 14:26
Смотришь как реализован Collections.shuffle() и так же делаешь для массива.

Автор: TWoVKP 2.7.2009, 14:28
А можно маленечко поподробней, и если не трудно небольшой простенький пример!

 smile 

 smile 

Автор: fixxer 2.7.2009, 14:42
на пример
Код

    public static void main(String[] args) {
    Integer[] ints = new Integer[10];
    for (int i = 0; i < ints.length; i++) {
        ints[i] = i;
    }
    List<Integer> lst = Arrays.asList(ints);
    Collections.shuffle(lst);
    ints = lst.toArray(ints);
    for (Integer i : ints) {
        System.out.println(i);
    }
    }

Автор: TWoVKP 2.7.2009, 15:28
Всё работает, спасибки за помошь!!!


 smile  smile  smile  smile  smile  smile  smile  smile 

Автор: kempka 10.11.2016, 15:12
Я перемешивал массив Java без использования Collections, по рабоче-крестьянски, поскольку условия задачи не позволяло. 
Вот что получилось:
Код

    public static void main(String[] args) {
        int[] m = {-3, -6, -2, -3, -3, -3, 2, 7, 7, 10, 5, 2}; //   Этот массив будем перемешивать.
        for (int i = 0; i < m.length; i++) {
            System.out.print(m[i] + "  ");}
        System.out.println();
        //  Объявляем буферный массив такой же длины как у "m" (у меня: 12),
        //  автоматически массив заполняется нулями.
        int[] n = new int[12];  //  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
        int h = 0;  //  Счётчик.
        //  Чтобы в дальнейшем избежать конфликта со сравнением с нулём,
        //  заполняем массив любыми числами не входящими в интервал длины массива.
        //  В моём случае, я заполнил всё числами - 12 (n.length).
        for (int p = 0; p < n.length; p++) {
            n[p] = n.length;}   //  {12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}
        for (int i = 0; i < m.length; i++) {
            //  Генерация псевдослучайного числа из интервала [0; 11].
            int k = (int)(Math.random() * m.length);
            //  Сравнение двух массивов
            for (int j = 0; j < m.length; j++) {
                if (k == n[j]) {    //  если число уже было, то заменим его псевдослучайным
                    k = (int) (Math.random() * n.length);
                    j = -1;
                }}
            n[h] = k;
            h++;
            System.out.print(m[k]+"  ");
    }}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)