Zufallszahlen in Java generieren: Praktischer Leitfaden mit Random und Math.random
In diesem prägnanten Tutorial lernen Sie, wie Sie Zufallswerte in Java mit den zwei gängigsten Ansätzen erzeugen: java.util.Random und Math.random(). Beide sind Teil des JDK, aber jeder dient leicht unterschiedlichen Use-Cases und bietet einzigartige Features.
- java.util.Random – Erzeugt Zahlen jedes primitiven Typs und kann für Reproduzierbarkeit gesät (seeded) werden.
- Math.random() – Bietet einen schnellen Weg, um ein double im Bereich [0.0, 1.0) zu erhalten, ohne ein Objekt zu erstellen.
Zufallszahlengenerierung mit java.util.Random
Die Random-Klasse kann int, long, float, double und boolean Werte erzeugen. Instanziieren Sie sie einmal und wiederverwenden Sie dasselbe Objekt, um Performance-Overhead zu vermeiden.
Nachfolgend ein vollständiges Beispiel, das zehn zufällige Integer zwischen 0 und 99 (inklusiv) ausgibt. Wenn Sie die obere Grenze inklusiv benötigen, addieren Sie 1 zum Argument.
import java.util.Random;
public class RandomNumbers {
public static void main(String[] args) {
Random rng = new Random();
for (int i = 0; i < 10; i++) {
int randomNumber = rng.nextInt(100); // 0-99
System.out.println("Random No: " + randomNumber);
}
}
}
Typische Ausgabe:
Random No: 17 Random No: 57 Random No: 73 Random No: 48 Random No: 68 Random No: 86 Random No: 34 Random No: 97 Random No: 73 Random No: 18
Da Random für die meisten Anwendungen thread-sicher ist, können Sie dieselbe Instanz über mehrere Threads teilen, falls nötig. Für reproduzierbare Sequenzen übergeben Sie einen Seed: new Random(42).
Zufallszahlengenerierung mit Math.random()
Wenn Sie nur schnell ein double im Bereich [0.0, 1.0) benötigen, ist Math.random() praktisch. Es delegiert intern an eine einzelne Random-Instanz, sodass es für kleine Workloads effizient ist.
Beispiel: Erzeugen Sie zehn double-Werte.
public class DemoRandom {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(Math.random());
}
}
}
Typische Ausgabe:
0.46518450373334297 0.14859851177803485 0.5628391820492477 0.6323378498048606 0.1740198445692248 0.9140544122258946 0.9167350036262347 0.49251219841030147 0.7426056725722353
Um Integer oder Doubles in einem anderen Bereich zu erzeugen, kombinieren Sie Math.random() mit Arithmetik. Zum Beispiel, um ein zufälliges int zwischen 1 und 10 inklusiv zu erhalten: (int)(Math.random() * 10) + 1.
Wichtigste Erkenntnisse
- Verwenden Sie
java.util.Random, wenn Sie eine Vielzahl von primitiven Typen oder deterministische Sequenzen via Seeding benötigen. - Verwenden Sie
Math.random()für schnelle, einmalige Doubles im [0.0, 1.0)-Intervall. - Wiederverwenden Sie stets dieselbe
Random-Instanz, um wiederholten Seeding-Overhead zu vermeiden. - Für thread-sichere, hochperformante Zufälligkeit in konkurrierenden Umgebungen ziehen Sie
ThreadLocalRandom(Java 7+) in Betracht.
Java
- Java EE Applikationen auf Microsoft Azure deployen: Schritt-für-Schritt Guide
- Java List Interface: Überblick, Implementierungen und Schlüsselmethoden
- Java Collections Algorithmen meistern: Sortieren, Mischen und mehr
- Array von Objekten in Java erstellen: Schritt-für-Schritt-Anleitung
- Java String length() Methode: String-Länge ermitteln (Beispiel)
- Java String compareTo() meistern: Syntax, Anwendungsfälle und praktische Beispiele
- Dateien in Java mit BufferedReader lesen – Praktischer Leitfaden mit Beispielen
- Char in String in Java konvertieren – Praxisbeispiele und Best Practices
- String in Java mit Rekursion umkehren – Schritt-für-Schritt-Anleitung
- Java 8 Streams: Deklarative Datenverarbeitung – filter, map, reduce, collect & parallel