Generieren von Zufallszahlen in Java
Sarinya Pinngam / EyeEm / Getty Images
Generieren einer Reihe von zufällige Zahlen ist eine dieser häufigen Aufgaben, die von Zeit zu Zeit auftauchen. Im Java , kann dies einfach durch die Verwendung der Klasse java.util.Random erreicht werden.
Der erste Schritt, wie bei der Verwendung jeder API Klasse , besteht darin, die import-Anweisung vor den Start Ihrer Programmklasse zu stellen:
Erstellen Sie als Nächstes ein Zufallsobjekt:
Das Random-Objekt stellt Ihnen einen einfachen Zufallszahlengenerator zur Verfügung. Die Methoden des Objekts geben die Möglichkeit, Zufallszahlen auszuwählen. Beispielsweise geben die Methoden nextInt() und nextLong() eine Zahl zurück, die innerhalb des Wertebereichs (negativ und positiv) der Datentypen int bzw. long liegt:
Die zurückgegebenen Zahlen sind zufällig ausgewählte Int- und Long-Werte:
Auswählen von Zufallszahlen aus einem bestimmten Bereich
Normalerweise müssen die zu erzeugenden Zufallszahlen aus einem bestimmten Bereich stammen (z. B. zwischen 1 und einschließlich 40). Zu diesem Zweck kann die Methode nextInt() auch einen int-Parameter entgegennehmen. Sie bezeichnet die Obergrenze für den Zahlenbereich. Die obere Grenznummer ist jedoch nicht als eine der Nummern enthalten, die ausgewählt werden können. Das mag verwirrend klingen, aber die Methode nextInt() arbeitet von Null aufwärts. Zum Beispiel:
wählt nur eine zufällige Zahl von 0 bis einschließlich 39 aus. Um aus einem Bereich auszuwählen, der mit 1 beginnt, addieren Sie einfach 1 zum Ergebnis der Methode nextInt(). Um beispielsweise eine Zahl zwischen 1 und 40 auszuwählen, fügen Sie dem Ergebnis eins hinzu:
Wenn der Bereich bei einer höheren Zahl als eins beginnt, müssen Sie:
- minus der Startnummer von der oberen Grenznummer und dann eins addieren.
- füge die Startnummer zum Ergebnis der Methode nextInt() hinzu.
Um beispielsweise eine Zahl von 5 bis einschließlich 35 auszuwählen, ist die obere Grenzzahl 35-5+1=31 und 5 muss zum Ergebnis hinzugefügt werden:
Wie zufällig ist die zufällige Klasse?
Ich sollte darauf hinweisen, dass die Random-Klasse Zufallszahlen auf deterministische Weise generiert. Der Algorithmus, der die Zufälligkeit erzeugt, basiert auf einer Zahl, die als Seed bezeichnet wird. Wenn die Seed-Nummer bekannt ist, ist es möglich, die Zahlen herauszufinden, die vom Algorithmus produziert werden. Um dies zu beweisen, verwende ich die Zahlen ab dem Datum, an dem Neil Armstrong als meine Samennummer zum ersten Mal den Mond betrat (20. Juli 1969):
Unabhängig davon, wer diesen Code ausführt, wird die Folge der erzeugten 'Zufallszahlen' sein:
Standardmäßig die Startnummer, die verwendet wird von:
ist die aktuelle Zeit in Millisekunden seit dem 1. Januar 1970. Normalerweise erzeugt dies für die meisten Zwecke ausreichend zufällige Zahlen. Beachten Sie jedoch, dass zwei Zufallszahlengeneratoren, die innerhalb derselben Millisekunde erstellt werden, dieselben Zufallszahlen erzeugen.
Seien Sie auch vorsichtig, wenn Sie die Random-Klasse für Anwendungen verwenden, die einen sicheren Zufallszahlengenerator haben müssen (z. B. ein Glücksspielprogramm). Es ist möglicherweise möglich, die Seed-Nummer basierend auf der Zeit zu erraten, zu der die Anwendung ausgeführt wird. Im Allgemeinen ist es für Anwendungen, bei denen Zufallszahlen absolut kritisch sind, am besten, eine Alternative zum Random-Objekt zu finden. Für die meisten Anwendungen, bei denen nur ein bestimmtes zufälliges Element vorhanden sein muss (z. B. Würfel für ein Brettspiel), funktioniert es gut.