Heute werden wir uns ansehen, wie man in Java eine Zufallszahl generiert. Manchmal müssen wir in Java-Programmen Zufallszahlen generieren. Zum Beispiel für ein Würfelspiel oder um eine zufällige Schlüssel-ID für die Verschlüsselung zu generieren, usw.
Zufallszahlengenerator in Java
Es gibt viele Möglichkeiten, in Java eine Zufallszahl zu generieren.
- Die Klasse java.util.Random kann verwendet werden, um Zufallszahlen zu erstellen. Sie bietet mehrere Methoden zum Generieren von Zufallszahlen für Integer, Long, Double usw.
- Außerdem können wir Math.random() verwenden, um eine Double-Zufallszahl zu generieren. Diese Methode verwendet intern die Java-Random-Klasse.
- Die Klasse
java.util.concurrent.ThreadLocalRandom
sollte verwendet werden, um Zufallszahlen in einer Mehrfadenumgebung zu generieren. Diese Klasse gehört zum Java Concurrent-Paket und wurde in Java 1.7 eingeführt. Diese Klasse verfügt über Methoden, die der Java-Random-Klasse ähnlich sind. java.security.SecureRandom
kann verwendet werden, um eine Zufallszahl mit hoher Sicherheit zu generieren. Diese Klasse stellt einen kryptografisch starken Zufallszahlengenerator bereit. Allerdings ist er in der Verarbeitung langsam. Je nach den Anforderungen Ihrer Anwendung sollten Sie entscheiden, ob Sie ihn verwenden möchten oder nicht.
Java Zufallszahlengenerator
Schauen wir uns einige Beispiele an, um eine Zufallszahl in Java zu generieren. Später werden wir uns auch ein Beispielprogramm für ThreadLocalRandom und SecureRandom ansehen.
1. Generiere eine zufällige Ganzzahl
Random random = new Random();
int rand = random.nextInt();
Ja, es ist so einfach, in Java eine zufällige Ganzzahl zu generieren. Wenn wir die Random-Instanz erstellen, generiert sie einen langen Startwert, der in allen Aufrufen der nextXXX
-Methoden verwendet wird. Wir können diesen Startwert im Programm festlegen, aber in den meisten Fällen ist dies nicht erforderlich.
// den langen Startwert mit dem Random-Konstruktor setzen
Random random = new Random(123456789);
// den langen Startwert mit der Setter-Methode setzen
Random random1 = new Random();
random1.setSeed(1234567890);
2. Zufallszahl in Java zwischen 1 und 10
Manchmal müssen wir eine Zufallszahl innerhalb eines Bereichs generieren. Zum Beispiel können in einem Würfelspiel mögliche Werte nur zwischen 1 und 6 liegen. Im folgenden Code wird gezeigt, wie man eine Zufallszahl zwischen 1 und 10 einschließlich generiert.
Random random = new Random();
int rand = 0;
while (true){
rand = random.nextInt(11);
if(rand !=0) break;
}
System.out.println(rand);
Das Argument in nextInt(int x)
wird ausgeschlossen, daher müssen wir das Argument als 11 angeben. Außerdem ist die 0 in der generierten Zufallszahl enthalten, daher müssen wir die nextInt-Methode weiter aufrufen, bis wir einen Wert zwischen 1 und 10 erhalten. Sie können den obigen Code erweitern, um die Zufallszahl innerhalb eines beliebigen Bereichs zu generieren.
3. Generiere zufällige Gleitkommazahl
Wir können Math.random()
oder die nextDouble
-Methode der Random-Klasse verwenden, um eine zufällige Gleitkommazahl in Java zu generieren.
Random random = new Random();
double d = random.nextDouble();
double d1 = Math.random();
4. Generiere zufällige Fließkommazahl
Random random = new Random();
float f = random.nextFloat();
5. Generiere zufällige Ganzzahl
Random random = new Random();
long l = random.nextLong();
6. Generiere zufälligen Wahrheitswert
Random random = new Random();
boolean flag = random.nextBoolean();
7. Generieren Sie ein zufälliges Byte-Array
Wir können zufällige Bytes generieren und sie in ein benutzerbereitgestelltes Byte-Array platzieren, indem wir die Random-Klasse verwenden. Die Anzahl der erzeugten zufälligen Bytes entspricht der Länge des Byte-Arrays.
Random random = new Random();
byte[] randomByteArray = new byte[5];
random.nextBytes(randomByteArray);
System.out.println(Arrays.toString(randomByteArray)); // sample output [-70, -57, 74, 99, -78]
8. ThreadLocalRandom in einer mehrfädigen Umgebung
Hier ist ein einfaches Beispiel, das die Verwendung von ThreadLocalRandom in einer mehrfädigen Umgebung zeigt.
package com.journaldev.randomnumber;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
public class ThreadLocalRandomExample {
public static void main(String[] args) {
Runnable runnable = new MyRunnable();
for (int i = 0; i < 5; i++) {
Thread t = new Thread(runnable);
t.setName("MyRunnable-Thread-" + i);
t.start();
}
}
}
class MyRunnable implements Runnable {
@Override
public void run() {
String threadName = Thread.currentThread().getName();
System.out.println(threadName + "::" + ThreadLocalRandom.current().nextInt());
}
}
Unten ist eine Beispielausgabe meiner Ausführung des obigen Programms.
MyRunnable-Thread-0::-1744088963
MyRunnable-Thread-3::139405798
MyRunnable-Thread-1::1403710182
MyRunnable-Thread-2::-1222080205
MyRunnable-Thread-4::-185825276
Wir können keinen Startwert für eine ThreadLocalRandom-Instanz festlegen, es wird eine UnsupportedOperationException
auslösen. Die Klasse ThreadLocalRandom hat auch einige zusätzliche Hilfsmethoden zum Generieren einer Zufallszahl innerhalb eines Bereichs. Zum Beispiel können wir eine Zufallszahl zwischen 1 und 10 wie folgt generieren.
ThreadLocalRandom random = ThreadLocalRandom.current();
int rand = random.nextInt(1, 11);
ThreadLocalRandom hat ähnliche Methoden zum Generieren von zufälligen langen und doppelten Werten.
9. SecureRandom Beispiel
Du kannst die SecureRandom-Klasse verwenden, um sicherere Zufallszahlen mit einem der aufgelisteten Anbieter zu generieren. Ein schnelles Beispielcode für SecureRandom ist unten angegeben.
Random random = new SecureRandom();
int rand = random.nextInt();
System.out.println(rand);
Das ist alles zum Generieren einer Zufallszahl im Java-Programm.
Du kannst den Beispielcode von unserem GitHub-Repository herunterladen.
Source:
https://www.digitalocean.com/community/tutorials/random-number-generator-java