Generowanie liczb losowych w Javie
Sarinya Pinngam / EyeEm / Getty Images
Generowanie serii losowe liczby to jedno z tych typowych zadań, które pojawiają się od czasu do czasu. W Jawa , można to osiągnąć po prostu za pomocą klasy java.util.Random.
Pierwszy krok, jak przy użyciu dowolnego API klasa , jest umieszczenie instrukcji import przed rozpoczęciem klasy programu:
Następnie utwórz obiekt Random:
Obiekt Random zapewnia prosty generator liczb losowych. Metody obiektu dają możliwość losowania liczb. Na przykład metody nextInt() i nextLong() zwrócą liczbę mieszczącą się w zakresie wartości (ujemnych i dodatnich) odpowiednio typu danych int i long:
Zwracane liczby będą losowo wybranymi wartościami int i long:
Wybieranie liczb losowych z określonego zakresu
Zwykle losowe liczby, które mają zostać wygenerowane, muszą należeć do określonego zakresu (np. od 1 do 40 włącznie). W tym celu metoda nextInt() może również przyjmować parametr int. Oznacza górną granicę zakresu liczb. Jednak górna liczba graniczna nie jest uwzględniona jako jedna z liczb, które można wybrać. To może wydawać się mylące, ale metoda nextInt() działa od zera w górę. Na przykład:
wybierze tylko losową liczbę od 0 do 39 włącznie. Aby wybrać z zakresu, który zaczyna się od 1, po prostu dodaj 1 do wyniku metody nextInt(). Na przykład, aby wybrać liczbę od 1 do 40 włącznie, dodaj jedną do wyniku:
Jeśli zakres zaczyna się od większej liczby niż jeden, będziesz musiał:
- minus numer początkowy od numeru górnego limitu, a następnie dodaj jeden.
- dodaj numer początkowy do wyniku metody nextInt().
Na przykład, aby wybrać liczbę od 5 do 35 włącznie, górna liczba graniczna będzie wynosić 35-5+1=31 i do wyniku należy dodać 5:
Jak losowa jest klasa losowa?
Należy zaznaczyć, że klasa Random generuje liczby losowe w sposób deterministyczny. Algorytm generujący losowość opiera się na liczbie zwanej ziarnem. Jeśli znany jest numer zalążkowy, to z algorytmu można wyliczyć liczby, które zostaną wygenerowane. Aby to udowodnić, użyję liczb z daty, w której Neil Armstrong pierwszy wszedł na Księżyc jako mój numer nasion (20 lipca 1969):
Bez względu na to, kto uruchomi ten kod, sekwencja otrzymanych liczb „losowych” będzie wyglądać tak:
Domyślnie numer początkowy używany przez:
jest bieżącym czasem w milisekundach od 1 stycznia 1970. Zwykle da to wystarczająco losowe liczby dla większości celów. Należy jednak pamiętać, że dwa generatory liczb losowych utworzone w ciągu tej samej milisekundy wygenerują te same liczby losowe.
Należy również zachować ostrożność podczas korzystania z klasy Random dla dowolnej aplikacji, która musi mieć bezpieczny generator liczb losowych (np. program hazardowy). Możliwe jest odgadnięcie numeru inicjatora na podstawie czasu działania aplikacji. Ogólnie rzecz biorąc, w przypadku aplikacji, w których liczby losowe są absolutnie krytyczne, najlepiej jest znaleźć alternatywę dla obiektu Random. W większości zastosowań, w których wystarczy pewien element losowy (np. kości do gry planszowej), działa to dobrze.