diff options
| author | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
|---|---|---|
| committer | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
| commit | 33613a85afc4b1481367fbe92a17ee59c240250b (patch) | |
| tree | 670b842326116b376b505ec2263878912fca97e2 /Master/Reference Architectures and Patterns/hjp5/html/k100108.html | |
| download | Studium-master.tar.gz Studium-master.tar.bz2 | |
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100108.html')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/html/k100108.html | 308 |
1 files changed, 308 insertions, 0 deletions
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 @@ +<html>
+<head>
+<title>
+Handbuch der Java-Programmierung, 5. Auflage
+</title>
+</head>
+<body>
+<a name="startofbody"></a>
+<script language="JavaScript" src="hjp4lib.js">
+</script>
+<script language="JavaScript">
+installKbdHandler("97,#startofbody;101,#endofbody;116,cover.html;122,k100003.html;115,search.html;105,index.html;100,JDKDOCS;112,APIDOCS;104,k100107.html;106,k100107.html;107,k100109.html;108,k100114.html");
+</script>
+<table border=0 cellpadding=0 cellspacing=1 width="100%">
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100107.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100107.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100109.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100114.html"> >> </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
+<td align="right">Kapitel 16 - Utility-Klassen I
+</table>
+<hr>
+
+
+<!-- Section -->
+<a name="zufallszahlen"></a>
+<h2>16.1 Die Klasse Random </h2>
+<hr>
+<ul>
+<li><a href="k100108.html#zufallszahlen">16.1 Die Klasse Random</a>
+<ul>
+<li><a href="k100108.html#sectlevel3id016001001">16.1.1 Initialisierung des Zufallszahlengenerators</a>
+<li><a href="k100108.html#sectlevel3id016001002">16.1.2 Erzeugen von Zufallszahlen</a>
+<ul>
+<li><a href="k100108.html#sectlevel4id016001002001">Gleichverteilte Zufallszahlen</a>
+<li><a href="k100108.html#sectlevel4id016001002002">Normalverteilte Zufallszahlen</a>
+</ul>
+</ul>
+</ul>
+<hr>
+
+
+<!-- Section -->
+<a name="sectlevel3id016001001"></a>
+<h3>16.1.1 Initialisierung des Zufallszahlengenerators </h3>
+
+<p>
+<a name="ixa101032">Zufallszahlen</a> 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 <a name="ixa101033"><a href="index_r.html#ixb100128"><font color=#000080><tt>Random</tt></font></a></a>
+zur Verfügung, mit der Zufallszahlen erzeugt werden können.
+Sie basiert auf dem <i>Linear-Kongruenz-Algorithmus</i>, wie er beispielsweise
+in D.E. Knuths »The Art Of Computer Programming, Vol. 2«
+beschrieben ist.
+
+<p>
+Die Klasse <a href="index_r.html#ixb100128"><font color=#000080><tt>Random</tt></font></a>
+erlaubt das Instanzieren eines Zufallszahlengenerators mit oder ohne
+manuelles Setzen des <font color="#000077"><tt>seed</tt></font>-Wertes
+(also der internen Zufallsvariable):
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public Random()
+
+public Random(long seed)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/util/Random.html" onClick="this.href=getApiDoc('java.util.Random')"><font color="#660066" size=-1>java.util.Random</font></a></td>
+</tr>
+</table>
+
+<p>
+Wird der <font color="#000077"><tt>seed</tt></font>-Parameter übergeben,
+initialisiert der Zufallszahlengenerator seinen internen Zähler
+mit diesem Wert, und die anschließend erzeugte Folge von Zufallszahlen
+ist <i>reproduzierbar</i>. Wird dagegen der parameterlose Konstruktor
+aufgerufen, initialisiert er den Zufallszahlengenerator auf der Basis
+der aktuellen Systemzeit. Die Zufallszahlenfolge ist in diesem Fall
+nicht reproduzierbar.
+
+<!-- Section -->
+
+<a name="sectlevel3id016001002"></a>
+<h3>16.1.2 Erzeugen von Zufallszahlen </h3>
+
+
+<!-- Section -->
+<a name="sectlevel4id016001002001"></a>
+<h4>Gleichverteilte Zufallszahlen </h4>
+
+<p>
+Der Zufallszahlengenerator kann Zufallszahlen für die numerischen
+Grundtypen <a href="index_i.html#ixb100244"><font color=#000080><tt>int</tt></font></a>,
+<a href="index_l.html#ixb100245"><font color=#000080><tt>long</tt></font></a>,
+<a href="index_f.html#ixb100246"><font color=#000080><tt>float</tt></font></a>
+oder <a href="index_d.html#ixb100247"><font color=#000080><tt>double</tt></font></a>
+erzeugen. Durch Aufruf einer der Methoden <a name="ixa101034"><a href="index_n.html#ixb100786"><font color=#000080><tt>nextInt</tt></font></a></a>,
+<a name="ixa101035"><a href="index_n.html#ixb100787"><font color=#000080><tt>nextLong</tt></font></a></a>,
+<a name="ixa101036"><a href="index_n.html#ixb100788"><font color=#000080><tt>nextFloat</tt></font></a></a>
+oder <a name="ixa101037"><a href="index_n.html#ixb100789"><font color=#000080><tt>nextDouble</tt></font></a></a>
+wird die jeweils nächste Zufallszahl des entsprechenden Typs
+ermittelt und an den Aufrufer zurückgegeben:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public int nextInt()
+public int nextInt(int n)
+
+public long nextLong()
+
+public float nextFloat()
+
+public double nextDouble()
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/util/Random.html" onClick="this.href=getApiDoc('java.util.Random')"><font color="#660066" size=-1>java.util.Random</font></a></td>
+</tr>
+</table>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+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 <font color="#000077"><tt>Math.abs</tt></font> in einen positiven
+Wert umgewandelt werden.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
+<tr>
+<td><font color="#FFFFFF"> Hinweis </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+<p>
+Sollen nur ganzzahlige Zufallswerte unterhalb einer bestimmten Obergrenze
+<i>n</i> erzeugt werden, kann das Ergebnis zusätzlich modulo
+<i>n</i> genommen werden. Sollen nur positive Ganzzahlen (inklusive
+0) erzeugt werden, kann die mit einem <a href="index_i.html#ixb100244"><font color=#000080><tt>int</tt></font></a>
+parametrisierte Variante von <a href="index_n.html#ixb100786"><font color=#000080><tt>nextInt</tt></font></a>
+verwendet werden. Zurückgegeben werden gleichverteilte Zufallszahlen
+zwischen 0 (inklusive) und <font color="#000077"><tt>n</tt></font>
+(exklusive).
+
+<p>
+Das folgende Beispiel zeigt die Verwendung von Zufallszahlen zur Generierung
+eines Lottotips. Hierbei werden durch Aufruf von <a href="index_n.html#ixb100786"><font color=#000080><tt>nextInt</tt></font></a>
+ganzzahlige Zufallszahlen erzeugt und mit Hilfe der <a name="ixa101038"><a href="index_a.html#ixb100790"><font color=#000080><tt>abs</tt></font></a></a>-Methode
+und des Modulo-Operators auf den Wertebereich von 1 bis 49 beschränkt.
+<font color="#000077"><tt>BitSet b</tt></font> verhindert, dass Zahlen
+doppelt in den Tipp eingehen, und wird zur sortierten Ausgabe des
+Ergebnisses verwendet:
+<a name="lottolisting1"></a>
+
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
+<tr>
+<td valign=top>
+<font color="#000055">
+<pre>
+<font color="#555555">001 </font><font color="#00AA00">/* Listing1601.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">import</font> java.util.*;
+<font color="#555555">004 </font>
+<font color="#555555">005 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing1601
+<font color="#555555">006 </font>{
+<font color="#555555">007 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
+<font color="#555555">008 </font> {
+<font color="#555555">009 </font> BitSet b = <font color="#0000AA">new</font> BitSet();
+<font color="#555555">010 </font> Random r = <font color="#0000AA">new</font> Random();
+<font color="#555555">011 </font>
+<font color="#555555">012 </font> System.out.print(<font color="#0000FF">"Mein Lottotip: "</font>);
+<font color="#555555">013 </font> <font color="#006699">int</font> cnt = 0;
+<font color="#555555">014 </font> <font color="#0000AA">while</font> (cnt < 6) {
+<font color="#555555">015 </font> <font color="#006699">int</font> num = 1 + Math.abs(r.nextInt()) % 49;
+<font color="#555555">016 </font> <font color="#0000AA">if</font> (!b.get(num)) {
+<font color="#555555">017 </font> b.set(num);
+<font color="#555555">018 </font> ++cnt;
+<font color="#555555">019 </font> }
+<font color="#555555">020 </font> }
+<font color="#555555">021 </font> <font color="#0000AA">for</font> (<font color="#006699">int</font> i = 1; i <= 49; ++i) {
+<font color="#555555">022 </font> <font color="#0000AA">if</font> (b.get(i)) {
+<font color="#555555">023 </font> System.out.print(i + <font color="#0000FF">" "</font>);
+<font color="#555555">024 </font> }
+<font color="#555555">025 </font> }
+<font color="#555555">026 </font> System.out.println(<font color="#0000FF">""</font>);
+<font color="#555555">027 </font> }
+<font color="#555555">028 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Listing1601.java"><font color="#000055" size=-1>Listing1601.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 16.1: Zufallszahlen zur Generierung eines Lottotips</i></p>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Eine etwas einfacher zu handhabende Methode zur Erzeugung von Fließkomma-Zufallszahlen
+befindet sich in der Klasse <a name="ixa101039"><a href="index_m.html#ixb100436"><font color=#000080><tt>Math</tt></font></a></a>.
+Die Klassenmethode <font color="#000077"><tt>Math.random</tt></font>
+kann als Klassenmethode ohne Instanzierung eines Objekts verwendet
+werden und erzeugt gleichverteilte Zufallszahlen auf der Basis von
+<a href="index_n.html#ixb100789"><font color=#000080><tt>nextDouble</tt></font></a>.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#0099CC">
+<tr>
+<td><font color="#FFFFFF"> Tipp </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+<p>
+Weitere Informationen zu Zufallszahlen finden sich in <a href="k100303.html#kryptozufallszahlen">Abschnitt 48.1.4</a>,
+in dem kryptografische Zufallszahlen erläutert werden.
+
+<!-- Section -->
+
+<a name="sectlevel4id016001002002"></a>
+<h4>Normalverteilte Zufallszahlen </h4>
+
+<p>
+Während diese Methoden <i>gleichverteilte</i> Zufallszahlen erzeugen,
+liefert die Methode <a name="ixa101040"><a href="index_n.html#ixb100791"><font color=#000080><tt>nextGaussian</tt></font></a></a>
+die Zufallszahlen auf der Basis der <i>Normalverteilung</i> mit einem
+Mittelwert von 0.0 und der Standardabweichung von 1.0:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public double nextGaussian()
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/util/Random.html" onClick="this.href=getApiDoc('java.util.Random')"><font color="#660066" size=-1>java.util.Random</font></a></td>
+</tr>
+</table>
+
+<p>
+Auch hier erzeugt ein Aufruf die jeweils nächste Zufallszahl
+auf der Basis des vorherigen Werts.
+<hr>
+<table border=0 cellpadding=0 cellspacing=1 width="100%">
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage, Addison
+Wesley, Version 5.0.1
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100107.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100107.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100109.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100114.html"> >> </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
+<td align="right">© 1998, 2007 Guido Krüger & Thomas
+Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
+</table>
+<a name="endofbody"></a>
+</body>
+</html>
|
