Cześć, mam pytanko związane z klasą Random.
Jak losuję jakieś liczny, to mogę wykluczyć z wyszukiwania jakieś konkretne, których nie chce?
- 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.
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.
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!
Dużo zależy od zakresu.
Jeśli przedział jest ciągiem - np. chcesz losować liczby z ciągu {2,3,4,5,6}
- To losujesz liczbę od 0 do 4 i dodajesz 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.
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.
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.
Już sobie poradziłam z if'ami. Nie jest to na tle skomplikowane losowanie, by jeszcze upraszczać. Dzięki za pomoc wszystkim :)
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.