Randomowe losowanie liczb

0

Cześć, mam pytanko związane z klasą Random.
Jak losuję jakieś liczny, to mogę wykluczyć z wyszukiwania jakieś konkretne, których nie chce?

1
  • jeśli natrafisz na liczbę poza zakresem, możesz raz jeszcze wywołać losowanie (i tak do skutku),
  • możesz także przygotować sobie tablicę zawierającą liczby będące w zakresie i losować indeks tej tablicy.
1

Nie, ale możesz zrobić klasę wrappera który przyjmie listę liczb których nie chcesz i jeżeli je wylosuje to powtórzy generowanie aż nie uzyska wyniku spoza listy.

0
Patryk27 napisał(a):
  • jeśli natrafisz na liczbę poza zakresem, możesz raz jeszcze wywołać losowanie (i tak do skutku)

Właśnie tak kombinuję, ale liczyłam, że mogę sympatyczniej to obejść :)
Dzięki!

0

Dużo zależy od zakresu.

Jeśli przedział jest ciągiem - np. chcesz losować liczby z ciągu {2,3,4,5,6}

  1. To losujesz liczbę od 0 do 4 i dodajesz 2.
  2. Jeśli używasz Javy 1.8 to można skorzystać ze streamów (przy większych ilościach liczb):
    Random r = new Random();
    int[] randomElements = r.ints(20, 2, 7).toArray();

Jeśli nie - {1,2,3,8,9,10} to trzeba kombinować. Dobrym rozwiązaniem jest - tak jak już pisał @Patryk27 - przypisanie liczb do tablicy, i wylosowanie jednej.

0
blue rabbit napisał(a):
Patryk27 napisał(a):
  • jeśli natrafisz na liczbę poza zakresem, możesz raz jeszcze wywołać losowanie (i tak do skutku)

Właśnie tak kombinuję, ale liczyłam, że mogę sympatyczniej to obejść :)
Dzięki!
Pewnie da się "sympatyczniej", ale twój opis problemu jest na tyle zdawkowy, że nie ma co liczyć na lepsze odpowiedzi.

2

Ponowne losowanie ma ten minus że jeśli tych "wykluczonych" jest dużo to nagle masz złożoność O(nieskończoność). Wtedy lepiej zrobić sobie listę "dobrych" liczb, zrobić na niej shuffle i wyciągać po kolei.

0

Już sobie poradziłam z if'ami. Nie jest to na tle skomplikowane losowanie, by jeszcze upraszczać. Dzięki za pomoc wszystkim :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0