2016-02-16 2 views
1

Я пытаюсь создать метод случайного перетасовки массива примитивов с использованием Arraylist. Мне было интересно, был ли метод .get(); правильным методом для моего Arraylist, где на обычном массиве в цикле for это было бы только array[j];, где j - значение в цикле for. Кроме того, я не слишком хорошо знаком с Math.random(); и нуждался в некоторой помощи в ее реализации в этой ситуации.Shuffling ArrayList

public static void selectionShuffle(int[] values) { 

    ArrayList<Integer> temp=new ArrayList<Integer>(52); 

    int rando=(int)Math.random()*52+1; 
    for(int counter=0;counter<temp.size();counter++){ 
     temp.set(rando,(Integer)counter); 
    } 

    for(int counter=0;counter<values.length;counter++){ 
     values[counter]=temp.get(counter); 
    } 
} 
+2

['Collections.shuffle'] (https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#shuffle (java.util.List)) – MadProgrammer

+0

Tariq: Когда вы делаете это: ArrayList temp = new ArrayList (52); Что вы собираетесь делать? В частности, когда вы помещаете эти 52 в эти скобки, что вы ожидаете? –

ответ

2

Collections.shuffle(temp); является то, что вам нужно, мой друг

http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#shuffle%28java.util.List%29

Что вы можете сделать, это после создания ArrayList, как вы делали, просто запустить регулярные for-loop и добавить все 52 значения, как это

for(int i = 0; i < 52; i++){ 
temp.add(i); 
} 

Тогда просто сделать это:

Collections.shuffle(temp); 

И все! распечатать результат для подтверждения

1

Ваша реализация должна гарантировать, что каждый индекс установлен хотя бы один раз. Ваш temp.set(rando,(Integer)counter) устанавливает случайный индекс на значение счетчика. Кроме того, вы должны изменить значение rando с каждой итерацией цикла.

Math.random()

возвращает двойное значение с положительным знаком, превышающим или равным 0,0 и меньше, чем 1,0.

согласно Oracle, поэтому, когда вы умножить на 52,0 вы получите значение от 0 до 51.9 включительно. При нажатии на целое число усекается на пол его значения, предоставляя вам диапазон от 0 до 51 включительно или размер вашего массива.