From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../hjp5/html/k100108.html | 308 +++++++++++++++++++++ 1 file changed, 308 insertions(+) create mode 100644 Master/Reference Architectures and Patterns/hjp5/html/k100108.html (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100108.html') diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100108.html b/Master/Reference Architectures and Patterns/hjp5/html/k100108.html new file mode 100644 index 0000000..0a373f0 --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100108.html @@ -0,0 +1,308 @@ + + + +Handbuch der Java-Programmierung, 5. Auflage + + + + + + + + + +
 Titel  + Inhalt  + Suchen  + Index  + DOC  +Handbuch der Java-Programmierung, 5. Auflage +
 <<  +  <   +  >   + >>  + API  +Kapitel 16 - Utility-Klassen I +
+
+ + + + +

16.1 Die Klasse Random

+
+ +
+ + + + +

16.1.1 Initialisierung des Zufallszahlengenerators

+ +

+Zufallszahlen werden beim Programmieren erstaunlich +häufig gebraucht, beispielsweise für Simulationen, für +Spiele oder zum Aufbau von Testszenarien. Java stellt zu diesem Zweck +eine Klasse Random +zur Verfügung, mit der Zufallszahlen erzeugt werden können. +Sie basiert auf dem Linear-Kongruenz-Algorithmus, wie er beispielsweise +in D.E. Knuths »The Art Of Computer Programming, Vol. 2« +beschrieben ist. + +

+Die Klasse Random +erlaubt das Instanzieren eines Zufallszahlengenerators mit oder ohne +manuelles Setzen des seed-Wertes +(also der internen Zufallsvariable): +

+ + + + + +
+ +
+public Random()
+
+public Random(long seed)
+
+
+
+java.util.Random
+ +

+Wird der seed-Parameter übergeben, +initialisiert der Zufallszahlengenerator seinen internen Zähler +mit diesem Wert, und die anschließend erzeugte Folge von Zufallszahlen +ist reproduzierbar. Wird dagegen der parameterlose Konstruktor +aufgerufen, initialisiert er den Zufallszahlengenerator auf der Basis +der aktuellen Systemzeit. Die Zufallszahlenfolge ist in diesem Fall +nicht reproduzierbar. + + + + +

16.1.2 Erzeugen von Zufallszahlen

+ + + + +

Gleichverteilte Zufallszahlen

+ +

+Der Zufallszahlengenerator kann Zufallszahlen für die numerischen +Grundtypen int, +long, +float +oder double +erzeugen. Durch Aufruf einer der Methoden nextInt, +nextLong, +nextFloat +oder nextDouble +wird die jeweils nächste Zufallszahl des entsprechenden Typs +ermittelt und an den Aufrufer zurückgegeben: +

+ + + + + +
+ +
+public int nextInt()
+public int nextInt(int n)
+
+public long nextLong()
+
+public float nextFloat()
+
+public double nextDouble()
+
+
+
+java.util.Random
+

+ + + + + + + + + +
+ +

+Anders als in vielen anderen Programmiersprachen liefern diese Methoden +Ergebnisse aus dem gesamten Wertebereich des entsprechenden Grundtyps, +also auch negative Zufallszahlen. Soll der Rückgabewert auf Werte +größer gleich Null beschränkt werden, kann das Ergebnis +mit Math.abs in einen positiven +Wert umgewandelt werden.

+ + + + +
 Hinweis 
+
+ +

+Sollen nur ganzzahlige Zufallswerte unterhalb einer bestimmten Obergrenze +n erzeugt werden, kann das Ergebnis zusätzlich modulo +n genommen werden. Sollen nur positive Ganzzahlen (inklusive +0) erzeugt werden, kann die mit einem int +parametrisierte Variante von nextInt +verwendet werden. Zurückgegeben werden gleichverteilte Zufallszahlen +zwischen 0 (inklusive) und n +(exklusive). + +

+Das folgende Beispiel zeigt die Verwendung von Zufallszahlen zur Generierung +eines Lottotips. Hierbei werden durch Aufruf von nextInt +ganzzahlige Zufallszahlen erzeugt und mit Hilfe der abs-Methode +und des Modulo-Operators auf den Wertebereich von 1 bis 49 beschränkt. +BitSet b verhindert, dass Zahlen +doppelt in den Tipp eingehen, und wird zur sortierten Ausgabe des +Ergebnisses verwendet: + + +

+ + + + + +
+ +
+001 /* Listing1601.java */
+002 
+003 import java.util.*;
+004 
+005 public class Listing1601
+006 {
+007   public static void main(String[] args)
+008   {
+009     BitSet b = new BitSet();
+010     Random r = new Random();
+011 
+012     System.out.print("Mein Lottotip: ");
+013     int cnt = 0;
+014     while (cnt < 6) {
+015       int num = 1 + Math.abs(r.nextInt()) % 49;
+016       if (!b.get(num)) {
+017         b.set(num);
+018         ++cnt;
+019       }
+020     }
+021     for (int i = 1; i <= 49; ++i) {
+022       if (b.get(i)) {
+023         System.out.print(i + " ");
+024       }
+025     }
+026     System.out.println("");
+027   }
+028 }
+
+
+Listing1601.java
+ +Listing 16.1: Zufallszahlen zur Generierung eines Lottotips

+

+ + + + + + + + + + + +
+ +

+Eine etwas einfacher zu handhabende Methode zur Erzeugung von Fließkomma-Zufallszahlen +befindet sich in der Klasse Math. +Die Klassenmethode Math.random +kann als Klassenmethode ohne Instanzierung eines Objekts verwendet +werden und erzeugt gleichverteilte Zufallszahlen auf der Basis von +nextDouble.

+ + + + +
 Tipp 
+
+ +

+Weitere Informationen zu Zufallszahlen finden sich in Abschnitt 48.1.4, +in dem kryptografische Zufallszahlen erläutert werden. + + + + +

Normalverteilte Zufallszahlen

+ +

+Während diese Methoden gleichverteilte Zufallszahlen erzeugen, +liefert die Methode nextGaussian +die Zufallszahlen auf der Basis der Normalverteilung mit einem +Mittelwert von 0.0 und der Standardabweichung von 1.0: +

+ + + + + +
+ +
+public double nextGaussian()
+
+
+
+java.util.Random
+ +

+Auch hier erzeugt ein Aufruf die jeweils nächste Zufallszahl +auf der Basis des vorherigen Werts. +


+ + + +
 Titel  + Inhalt  + Suchen  + Index  + DOC  +Handbuch der Java-Programmierung, 5. Auflage, Addison +Wesley, Version 5.0.1 +
 <<  +  <   +  >   + >>  + API  +© 1998, 2007 Guido Krüger & Thomas +Stark, http://www.javabuch.de +
+ + + -- cgit v1.2.3