Losowość w Javie – klasa Random

Losowość jest powszechnie występującym zjawiskiem w naszym życiu codziennym. Elementy losowe od zawsze stanowiła źródło rozrywki dla ludzi czego dowodem jest towarzyszący od wieków hazard. Nie inaczej jest dziś, choć losowość ma znaczenie także w mniej kontrowersyjnych rozrywkach takich jak gry komputerowe oraz coraz bardziej popularne gry planszowe.

Czym jest losowość?

Losowość jest zjawiskiem, którego w żaden sposób nie możemy obliczyć, natomiast można ją opisać przy pomocy różnych rozkładów. Możemy też korzystając z pewnych danych poznawczych wywnioskować większe prawdopodobieństwo danego zdarzenia. Przykładem może być zakład sportowy polegający na obserwowaniu zawodnika, który odnosi sukcesy. Istnieje większe prawdopodobieństwo, że to właśnie on wygra dane zawody.

Generator liczb losowych (ang. Random Number Generator)

Z pewnością wielokrotnie spotkaliście się z pojęciem liczb pseudolosowych. Ich wartości są w rzeczywistości obliczane przy pomocy stosownego algorytmu. Oznacza to, że w przypadku identycznych danych wejściowych algorytm zwróci ten sam ciąg wartości.

Czemu zatem zdawać się na tak ograniczoną losowość? Otóż komputery nie są spontaniczne i mogą wykonywać jedynie to co zostało zaprogramowane. Poza tym jest to najprostszy sposób na zapewnienie jakiejkolwiek losowości.

Ziarno (ang. seed)

Ziarnem dla generatora liczb pseudolosowych jest wartość, która jest przetwarzana przez algorytm w celu uzyskania wartości. Jeżeli wartość ziarna jest użyta dwa razy w celu uzyskania ciągu liczb pseudolosowych, to będą one identyczne.

Klasa Random w Javie

Implementacją generatora liczb pseudolosowych w Javie jest klasa Random. Zawiera ona szereg metod, które pozwolą zwrócić żądaną przez nas wartość. Pierwszym krokiem w tym celu jest utworzeniu obiektu typu Random.

Lub utworzyć obiekt random podając własne ziarno.

Należy jednak pamiętać, że gdy ziarno jest stałe, to przy każdym uruchomieniu programu wygenerowana sekwencja liczb, znaków czy też innych wartości będzie identyczna. Aby zmodyfikować ziarno można użyć metody setSeed().

Zwróćmy uwagę, że zarówno ustawienie ziarna w konstruktorze jak i przy pomocy metody setSeed() przyniesie ten sam efekt.

Aby uzyskać konkretne dane skorzystamy z odpowiednich metod w zależności od typu danych.

Przykładowym efektem uruchomienia programu może być.

Klasa Math

Uzyskanie wartości pseudolosowej oferuje również klasa Math i jej metoda random(). Jej cechą jest to, że zawsze zwraca ona wartość dodatnią z przedziału od 0.0 włącznie do 1.0 (rozłącznie).

Wynikiem uruchomienia powyższego kodu może być.

Która metoda jest wygodniejsza?

To zależy od sytuacji. Należy tak dobierać sposób uzyskania losowej wartości, aby w jak najprostszy sposób wygenerować wartość, która będzie użyteczna w naszym programie.

Jeżeli problem dotyczy np. wartości logicznej, to prostsze wydaje się być użycie metody nextBoolean(). Natomiast nic nie stoi na przeszkodzie, aby napisać własny algorytm przetwarzający dane z metody random() i zwracające wartość typu boolean.