Generowanie liczb losowych w Javie

Generowanie serii losowe liczby jest jednym z tych typowych zadań, które pojawiają się od czasu do czasu. W Jawa, można to osiągnąć po prostu za pomocą java.util. Losowa klasa.

Pierwszy krok, jak przy użyciu dowolnego interfejsu API klasa, należy umieścić instrukcję importu przed rozpoczęciem klasy programu:

Następnie utwórz obiekt losowy:

Obiekt Random zapewnia prosty generator liczb losowych. Metody obiektu dają możliwość wybierania liczb losowych. Na przykład metody nextInt () i nextLong () zwrócą liczbę mieszczącą się w zakresie wartości (ujemnych i dodatnich) odpowiednio typów danych int i long:

Zwracane liczby będą losowo wybierane int i długie wartości:

Wybieranie liczb losowych z określonego zakresu

Zwykle generowane liczby losowe muszą pochodzić z określonego zakresu (np. Od 1 do 40 włącznie). W tym celu metoda nextInt () może również zaakceptować 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 zabrzmieć myląco, ale metoda nextInt () działa od zera w górę. Na przykład:

instagram viewer

wybierze tylko losową liczbę od 0 do 39 włącznie. Aby wybrać zakres zaczynający 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, musisz:

  • minus numer początkowy z górnego limitu, a następnie dodaj jeden.
  • dodaj liczbę początkową do wyniku metody nextInt ().

Na przykład, aby wybrać liczbę od 5 do 35 włącznie, górna liczba graniczna to 35-5 + 1 = 31, a do wyniku należy dodać 5:

Jak losowa jest klasa losowa?

Powinienem zaznaczyć, że klasa Random generuje liczby losowe w sposób deterministyczny. Algorytm generujący losowość opiera się na liczbie zwanej nasieniem. Jeśli numer początkowy jest znany, możliwe jest ustalenie liczb, które będą tworzone na podstawie algorytmu. Aby to udowodnić, użyję liczb od daty, w której Neil Armstrong po raz pierwszy pojawił się na Księżycu jako mój numer nasion (20 lipca 1969 r.):

Bez względu na to, kto uruchomi ten kod, sekwencją „losowych” liczb będzie:

Domyślnie numer początkowy używany przez:

to bieżący czas w milisekundach od 1 stycznia 1970 r. Zwykle daje to wystarczająco losowe liczby do większości celów. Należy jednak pamiętać, że dwa generatory liczb losowych utworzone w tej samej milisekundie wygenerują te same liczby losowe.

Zachowaj także ostrożność podczas korzystania z klasy Random w przypadku dowolnej aplikacji, która musi mieć bezpieczny generator liczb losowych (np. Program hazardowy). Może być możliwe odgadnięcie numeru początkowego na podstawie czasu działania aplikacji. Zasadniczo w przypadku aplikacji, w których liczby losowe są absolutnie krytyczne, najlepiej jest znaleźć alternatywę dla obiektu losowego. W przypadku większości aplikacji, w których musi być tylko pewien losowy element (np. Kostka do gry planszowej), to działa dobrze.