Generierung von Zufallszahlen in Java in einem bestimmten Bereich: Tutorial

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Zufallszahlen in Java: Vom Chaos zur Ordnung

\n\n

Hallo, zukünftiger Java-Entwickler! Wenn du jemals Spiele, Simulationen, Tests geschrieben oder einfach nur ein Element der Überraschung in dein Programm einbauen wolltest, bist du sicherlich auf die Notwendigkeit gestoßen, eine zufällige ganze Zahl in einem bestimmten Bereich zu erhalten. Es scheint einfach, oder? Aber in der Praxis haben Anfänger oft Fragen wie: „Warum bekomme ich Zahlen von 0 bis 100 und nicht von 50 bis 100?“ oder „Warum gibt mein Code einen Fehler aus?“.

\n\n

Heute klären wir dieses Thema ein für alle Mal. Du erfährst, wie man in Java eine Zufallszahl in jedem Bereich generiert, und zwar mit drei grundlegenden Ansätzen. Spoiler: Einer davon ist die beste Wahl für 90 % der Fälle. Los geht's!

\n\n

Warum ist das wichtig?

\n

Die Generierung von Zufallszahlen ist eine grundlegende, aber kritische Aufgabe. Sie ist unverzichtbar bei:

\n
    \n
  • Erstellung von Testdaten (z. B. Benutzer-IDs).
  • \n
  • Implementierung von Spielmechaniken (Gegenstands-Drops, Level-Generierung).
  • \n
  • Modellierung zufälliger Prozesse (Warteschlangen, Verkehr).
  • \n
  • Auswahl eines zufälligen Elements aus einer Liste.
  • \n
\n\n

Wenn du dieses Thema beherrschst, wirst du keine Angst mehr vor der „Magie“ im Code haben und souverän mit dem Zufall umgehen können.

\n\n

Methode Nr. 1: Der Klassiker — java.util.Random

\n

Dies ist der Urvater aller Generatoren in Java. Die Klasse java.util.Random existiert seit den frühesten Versionen und wird auch heute noch aktiv genutzt. Ihr Hauptvorteil ist die Vielseitigkeit.

\n\n

Wie erhält man einen zufälligen int von 0 bis N?

\n

Die Methode nextInt(int bound) gibt eine Zufallszahl von 0 (inklusive) bis bound (exklusive) zurück. Wenn du also nextInt(10) schreibst, erhältst du eine Zahl von 0 bis 9.

\n\n
import java.util.Random;\n\npublic class RandomExample {\n    public static void main(String[] args) {\n        Random random = new Random();\n        int number = random.nextInt(10); // 0..9\n        System.out.println("Zufallszahl: " + number);\n    }\n}
\n\n

Und wie macht man es von 5 bis 15?

\n

Hier liegt das große Geheimnis. Um eine Zahl in einem beliebigen Bereich [min, max] zu erhalten, verwendest du die Formel:

\n

min + random.nextInt(max - min + 1)

\n

Schauen wir uns das Beispiel an: Bereich von 5 bis 15.

\n
    \n
  • max - min + 1 = 15 - 5 + 1 = 11. Also liefert nextInt(11) Zahlen von 0 bis 10.
  • \n
  • Addiere min (5): Du erhältst den Bereich 5..15.
  • \n
\n

Überprüfung: Wenn nextInt(11) 0 zurückgibt, dann ist 0+5 = 5. Wenn es 10 zurückgibt, dann ist 10+5 = 15. Perfekt!

\n\n
Random random = new Random();\nint min = 5;\nint max = 15;\nint randomNumber = min + random.nextInt(max - min + 1);\nSystem.out.println("Zufallszahl von 5 bis 15: " + randomNumber);
\n\n

Wichtig: Vergiss das +1 nicht! Ohne es ist der Maximalwert um 1 kleiner.

\n\n

Methode Nr. 2: Der moderne Ansatz — ThreadLocalRandom

\n

Seit Java 7 gibt es die Klasse ThreadLocalRandom. Sie ist speziell für Multithread-Anwendungen optimiert (funktioniert aber auch in Singlethread-Anwendungen hervorragend). Der Hauptvorteil: Sie ist schneller als Random und erfordert kein separates Objekt.

\n\n

Verwendung in Singlethread-Code

\n

Sie hat eine praktische Methode nextInt(int origin, int bound), die direkt die Bereichsgrenzen akzeptiert! Beachte: origin ist inklusive, bound ist exklusive. Wenn du die Obergrenze einschließen möchtest, füge einfach +1 hinzu.

\n\n
import java.util.concurrent.ThreadLocalRandom;\n\npublic class ThreadLocalRandomExample {\n    public static void main(String[] args) {\n        // Zahl von 5 bis 15 (inklusive)\n        int randomNumber = ThreadLocalRandom.current().nextInt(5, 16);\n        System.out.println("Zufallszahl: " + randomNumber);\n    }\n}
\n\n

Siehst du, wie einfach das ist? Keine Formeln, kein

Blogs

Buchempfehlungen