może ktoś mi powiedzieć jak do generowania liczb losowych bez powtarzania przykładandroid - generowanie liczb losowych bez powtarzania
random (10) powinien (może) powrót 3,4,2,1,7,6 , 5,8,9,10 bez powtarzania
Dzięki
może ktoś mi powiedzieć jak do generowania liczb losowych bez powtarzania przykładandroid - generowanie liczb losowych bez powtarzania
random (10) powinien (może) powrót 3,4,2,1,7,6 , 5,8,9,10 bez powtarzania
Dzięki
proponuję dodanie numerów do ArrayList<Integer>
a następnie użyć Collections.shuffle()
do losowo ich kolejność. Coś takiego:
ArrayList<Integer> number = new ArrayList<Integer>();
for (int i = 1; i <= 10; ++i) number.add(i);
Collections.shuffle(number);
podobało! pytanie, czy wykonuję Collection.Shuffle dwa razy czy trzy razy, czy zapewni inną kolejność? – Yogesh
Jestem prawie pewien, że tak będzie. Nie mogę znaleźć powodu, dla którego nie powinien. Łatwo to sprawdzić, co? ;) –
Zrób listę wygenerowanych liczb, kiedy twój nowo wygenerowany numer jest już na tej liście, tworzysz nową losową liczbę.
Random rng = new Random(); // Ideally just create one instance globally
List<Integer> generated = new ArrayList<Integer>();
for (int i = 0; i < numbersNeeded; i++)
{
while(true)
{
Integer next = rng.nextInt(max) + 1;
if (!generated.contains(next))
{
// Done for this iteration
generated.add(next);
break;
}
}
}
Niestety ta metoda nie jest zbyt dobrze skalowalna –
Jeśli istnieją tylko kilka numerów, mniej niż 100, myślę, że rozwiązaniem mogłoby być stworzenie logiczną tablicę i gdy pojawi się szereg ustaw pozycję tablicy true. Nie wydaje mi się, żeby pojawiły się wszystkie liczby. Mam nadzieję, że to pomoże!
Pozdrawiam!
Moje dwa centy
public Collection<Integer> getRandomSubset(int max,int count){
if(count > max){
throw new IllegalArgumentException();
}
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i = 0 ; i < count ;i++){
list.add(i);
}
Collections.shuffle(list);
return list.subList(0, count);
}
Podoba mi się ulepszenie 'subList()' w tym rozwiązaniu - idealne do rozdawania kart z talii –
to pomoże: http://stackoverflow.com/questions/4040001/java-creating-random-numbers-with-no-duplicates – Thiru