Java

Zufallszahlen

Inhaltsübersicht

Du willst wissen, wie du Zufallszahlen in Java programmieren kannst? Im folgenden Beitrag zeigen wir dir einige wichtige Befehle zu diesem Thema.

 

Zufallszahlen: seed und random Java

Sind Zufallszahlen bei einem Computer überhaupt möglich? Ja, denn jede Programmiersprache, und somit auch Java, besitzt Methoden, um einen zufallsähnlichen Wert auszugeben. Diese zufallsähnlichen Werte werden auch „pseudozufällig“ genannt, da sie mittels einer Formel entstehen.

Jetzt fragst du dich bestimmt, warum die Werte nicht nachvollziehbar sind, wenn es doch dafür eine Formel gibt. Ganz so einfach ist das nicht. Denn diese Formel benötigt einen sogenannten „seed“, also einen beliebig langen Wert aus Zahlen, der übergeben werden muss. Dieser seed beeinflusst dann die Formel und somit auch die Werte, die diese Formel ausgibt. Würde es diesen unbekannten seed nicht geben, wären online Glücksspiele berechenbar und jeder, der sich mit Zufallszahlen auskennt, schon reich.

random Java
seed-Befehl

Damit man aber die „Pseudozufallswerte“ nicht mittels dem seed voraussehen kann, wird oftmals als seed die Zeit in Millisekunden oder Sekunden genommen. Denn diese ist ständig in Bewegung und kann somit bei jedem Programmstart einen anderen seed an die Formel übergeben. Somit verändern sich die zufallsgenerierten Zahlen bei jedem Programmstart.

Falls du deinen Startwert, also deinen seed, während der Programmlaufzeit nochmal ändern möchtest, kannst du das in Java mittels der „void setSeed(long seed)“ Methode machen. Sie gehört zur Klasse „Random“. Diese ist Teil des Pakets „java.util“ und kann genauso wie jede andere Klasse genutzt werden. Falls du dich mit dem Nutzen von Klassen unsicher fühlst, dann schau dir doch nochmal unser Video „Objekte“ dazu an.

random Java

Die Klasse Random besitzt zwei Konstruktoren. „Random()“ und „Random(long seed)“. Der erste erzeugt einen neuen Zufallszahlengenerator unter Verwendung der aktuellen Zeit als seed. Der zweite benötigt einen von dir ausgewählten seed. Dieser könnte nützlich werden, wenn du Strategien im Hinblick auf den gleichen Ablauf von Zufallsereignissen testen möchtest.

random Java, Java random int
random Java

Um ein Objekt der Klasse Random zu erstellen, also damit wir überhaupt Zugriff auf die Zufallszahlen haben, schreiben wir:

Random rand = new Random();

Stell dir vor, du brauchst zwei Zufallszahlengeneratoren in einem Programm. Dann kannst du nicht einfach zwei Objekte der Klasse Random mit dem gleichen Konstruktor erstellen.

Random rand1 = new Random();

Random rand2 = new Random();

Da sich die aktuelle Zeit zwischen der Ausführung der beiden Anweisungen kaum ändert, ist es sehr wahrscheinlich, dass die generierten Zahlen der beiden Objekte die gleichen sind. Und das entspricht bestimmt nicht deinen Erwartungen.

Als Lösung kannst du zum Beispiel dem Konstruktor des zweiten Objekts eine Zufallszahl übergeben, die vom ersten Objekt generiert wurde.

Java random int

Jetzt schauen wir uns die zwei wohl wichtigsten Methoden an, auf die wir mittels unserem Objekt Zugriff haben:

int nextInt
int nextInt

„int nextInt()“ und „int nextInt(int num)“. Die erste Methode übergibt den nächsten pseudozufälligen, gleich verteilten Integer zwischen -231 und 231-1. Die zweite Methode macht das gleiche. Der Wertebereich liegt bei dieser aber zwischen inklusive 0 und exklusive num. Bei „num“ handelt es sich dabei um den an die Methode übergebenen Parameter, der den Wertebereich bestimmt. Diese Methode wird häufiger verwendet, da man den Wertebereich verändern und somit an das Programm anpassen kann.

 

Beispiel

Schauen wir uns das ganze mal an einem Beispiel an: Wir wollen einen virtuellen Wurf eines Würfels simulieren. Der Code dazu ist ziemlich einfach:

random Java
Beispiel

Zuerst importieren wir das Packet „java.util.Random“ und erstellen uns eine Klasse, die wir Würfel nennen. Dann, innerhalb der main Methode, deklarieren wir ein Objekt der Klasse Random und verwenden den Konstruktor ohne Parameter, also somit die aktuelle Zeit als seed, damit das Programm so zufallsnah wie möglich ist. Am Schluss geben wir einen zufälligen Wert zwischen 1 und 6 auf dem Bildschirm aus.

Interessant dabei ist das „rand.nextInt(6)+1“. Wie wir wissen, besitzt ein normaler Würfel die Zahlen 1 bis 6. Die Methode next int mit dem num Wert 6 gibt aber nur einen Wert von 0 bis 5 aus. Wenn wir hinter die Methode noch eine +1 schreiben, dann ist das Ergebnis ein Wert zwischen 1 bis 6. Mit solchen kleinen Hilfsmitteln kannst du den Wertebereich nach deinem Belieben anpassen.

Eine weitere Methode der Klasse Random wäre zum Beispiel: „long nextLong()“, die eine gleichverteilte Pseudozufallszahl als long-Wert zurück gibt.

Gleitpunktwerte

Für Gleitpunktwerte gibt es natürlich auch noch Methoden. Diese geben einen pseudozufälligen Wert zwischen inklusive 0,0 und exklusive 1,0 zurück. Die einfachsten Methoden dazu wären „float nextFloat()“, die eine Pseudozufallszahl als Gleitpunktwert mit einfacher Genauigkeit zurück gibt und „double nextDouble()“, die eine Pseudozufallszahl als Gleitpunktwert mit doppelter Genauigkeit zurück gibt.

Du kannst dir sogar einen pseudozufälligen boolean-Wert mittels „boolean nextBoolean()“ zurück geben lassen.

Hallo, leider nutzt du einen AdBlocker.

Auf Studyflix bieten wir dir kostenlos hochwertige Bildung an. Dies können wir nur durch die Unterstützung unserer Werbepartner tun.

Schalte bitte deinen Adblocker für Studyflix aus oder füge uns zu deinen Ausnahmen hinzu. Das tut dir nicht weh und hilft uns weiter.

Danke!
Dein Studyflix-Team

Wenn du nicht weißt, wie du deinen Adblocker deaktivierst oder Studyflix zu den Ausnahmen hinzufügst, findest du hier eine kurze Anleitung. Bitte lade anschließend die Seite neu.