Czasem zdarza nam się, że potrzebujemy, chociażby do przetestowania aplikacji, pakietu liczb losowych. W takich momentach, z pomocą przychodzi nam klasa Random. Klasa ta, udostępnia nam kilka metod, za pomocą których wygenerujemy sobie dowolnego typu liczby pseudolosowe, z wybranych przez siebie zakresów. Wymienię i opiszę kilka bardziej przydatnych metod.
boolean nextBoolean() - metoda zwraca nam losowo true albo false. Tego chyba nie trzeba bardziej wyjaśniać.
double nextDouble() - metoda zwraca nam losową liczbę z przedziału 0 - 1. Jeżeli chcemy, aby wygenerowane zostały liczby losowe typu double z jakiegokolwiek innego przedziału, musimy zwracany wynik odpowiednio pomnożyć / podzielić. Poniżej przykład. Wykorzystana w nim struktura danych to lista wiązana.
LinkedList m = new LinkedList();
Random generator = new Random();
for(int i=0; i<36; i++) {
m.add(generator.nextDouble()*10);
}
float nextFloat() - metoda zachowuje się jak powyżej, z tym że generuje liczby zmiennoprzecinkowe pojedyńczej precyzji.
LinkedList m = new LinkedList();
Random generator = new Random();
for(int i=0; i<36; i++) {
m.add(generator.nextFloat(50));
}
int nextInt()- metoda ta, różni się od powyższych zakresem i typem generowanych liczb. Przy tej konkretnej metodzie, zakresem jest cały zakres Integer ,a generowane liczby są zarówno dodatnie, jak i ujemne.
LinkedList m = new LinkedList();
Random generator = new Random();
for(int i=0; i<36; i++) {
m.add(generator.nextInt());
}
int nextInt(int n) - to przeładowanie powyższej metody wprowadza górny (i dolny) ogranicznik. Generuje liczby z zakresu od zera (a więc same dodatnie, w przeciwieństwie do wersji bezparametrycznej) do wartości n, podanej jako parametr.
LinkedList m = new LinkedList();
Random generator = new Random();
for(int i=0; i<36; i++) {
m.add(generator.nextInt(50));
}
Powyższa implementacja wygeneruje nam liczby całkowite z przedziału 0-49.
Oczywiście to nie jedyne możliwości klasy Random. Może ona wygenerować także losowe bity, czy liczby wg rozkladu Gaussa. Jednakże zainteresowanych pełnymi możliwościami, zapraszam do przeglądnięcia dokumentacji.
Komentarze do artykułu
Wyłączyliśmy możliwość dodawania komentarzy. Poniżej znajdziesz archiwalne wpisy z czasów gdy strona była jeszcze hobbystycznym blogiem. Zapraszamy natomiast do zadawnia pytań i dyskusji na naszej grupe na facebooku.
Wygeneruj od 0 do 49. ;)
a czemu ma służyć to m.add?
Dodanie wyniku do listy
heh, faktycznie durne pytanie zadałem;p dzięki!
Ale o co chodzi z tym kasjerem?
jak powinnam tego użyć, jeśli chcę wylosować obiekt z ArrayList? Wszędzie widzę losowanie liczb, a mi zależy na obiekcie.
list.get(generator.nextInt(list.size()));
Witam mam pytanie a jak np wyglądałby generator który losował by nie jedną liczbę tylko np 5
int[] x = new int[5]; for(int i=0; i<5; i++) x[i] = generator.nextInt(/*zakres*/);
Zastanawiam sie jak mozna ustawic zakres losowanych liczb-np od 5 do 50.Zalezy mi na tym, zeby moc manewrowac swobodnie dolnym zakresem.Z gory dzieki za odpowiedz.
Bardzo łatwo. Użyj wyrażenia: generator.nextInt(45)+5
Super.Dzieki za pomoc.
Co do przykładu z nextFloat() - wkradła się wewnątrz nawiasów liczba "50", która oczywiście znajdować się tam nie powinna ;)
"Oczywiście to nie jedyne możliwości klasy Random. Może ona wygenerować także losowe bity, czy liczby Gaussa. Jednakże zainteresowanych przełnymi możliwościami, zapraszam do przeglądnięcia dokumentacji." W dokumentacji klasy Random nie ma nic na temat liczb Gaussa. Chodzi o rozkład Gaussa (czyli rozkład normalny). Proponuje zmienic "... czy liczby Gaussa" (link do http://pl.wikipedia.org/wiki/Liczby_ca%C5%82kowite_Gaussa) na "czy liczby wg rozkladu Gaussa." (link do http://pl.wikipedia.org/wiki/Rozk%C5%82ad_normalny)
Poprawione, dzięki!