Lernpfad:Würfelspiel in Java/Zufallszahlen generieren: Unterschied zwischen den Versionen

Aus Informatik-Box
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
KKeine Bearbeitungszusammenfassung
 
(16 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Navigation/{{ROOTPAGENAME}}}}
{{Navigation}}
 
== Zufallszahlen generieren ==
== Zufallszahlen generieren ==


Zeile 7: Zeile 6:


Java bietet verschiedene Methoden, Zufallszahlen zu erzeugen. Diese basieren
Java bietet verschiedene Methoden, Zufallszahlen zu erzeugen. Diese basieren
auf der Methode <code>Mathe.random()</code>, die eine Pseudozufallszahl zwischen 0 (inklusive) und 1 (exklusive) erzeugt. Diese Fliesskommazahlen können dann durch Rechenoperationen in den gewünschten Zahlenbereich transformiert werden.  
auf der Methode <code>[https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#random-- Math.random()]</code>, die eine Pseudozufallszahl zwischen 0 (inklusive) und 1 (exklusive) erzeugt. Diese Fließkommazahlen können dann durch Rechenoperationen in den gewünschten Zahlenbereich transformiert werden.  


Um einen Würfel zu simulieren kann man die von <code>Math.random()</code> generierten Werte zum Beispiel durch <code>(int) (Math.random()*6+1)</code>  
Um einen Würfel zu simulieren, kann man die von <code>Math.random()</code> generierten Werte zum Beispiel durch <code>(int) (Math.random()*6+1)</code> in eine Ganzzahl zwischen 1 (inklusive) und 6 (inklusive) transformieren. Die Grafik
in eine Ganzzahl zwischen 1 (inklusive) und 6 (inklusive) transformieren.
veranschaulicht, wie die einzelnen Rechnungen den Zahlenbereich Schritt für Schritt transformieren.


[[Datei:JavaZufall.jpg|center|Transformation von Zufallszahlen in einen bestimmten ganzzahligen Bereich (Java).]]
[[Datei:JavaZufall.jpg|center|Transformation von Zufallszahlen in einen bestimmten ganzzahligen Bereich (Java).]]


''Hinweis'': Im letzten Schritt wird ein ''Typecast'' vorgenommen, eine erzwungene Konvertierung von einem Datentyp (double) in einen anderen (int). In idesem Fall bedeutet das, dass Java einfach die Nachkommastellen des double-Wertes "abschneidet" (es wird also nicht gerundet). Aus <code>4.866</code> wird <code>4</code>.
{{Info:Start}}
Im letzten Schritt wird eine ''[[wikipedia:Typumwandlung|explizite Typumwandlung]]'' vorgenommen: eine erzwungene Konvertierung von einem Datentyp (<code>double</code>) in einen anderen (<code>int</code>). In diesem Fall bedeutet das, dass Java einfach die Nachkommastellen des double-Wertes "abschneidet" (es wird also nicht gerundet). Aus <code>4.866</code> wird <code>4</code>.
{{Info:End}}


Weitere Informationen zu Zufallszahlen (speziell in Java):
Weitere Informationen zu Zufallszahlen (speziell in Java):
Zeile 24: Zeile 25:


Zur einfachen Generierung von Zufallszahlen stellt Java die Hilfsklasse <code>java.util.Random</code> zur Verfügung.
Zur einfachen Generierung von Zufallszahlen stellt Java die Hilfsklasse <code>java.util.Random</code> zur Verfügung.
Diese stellt eine Reihe von Methoden zur Verfügung, um zum Beispiel zufällige Ganzzahlen einfach zu erzeugen.
Die enthält eine Reihe von Methoden, die unter anderem zufällige Ganzzahlen erzeugen.


Weitere Details können in der [https://docs.oracle.com/javase/8/docs/api/java/util/Random.html Java API Dokumentation der Klasse Random] und im [http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_12_005.htm#mje4ad6e86a12fd27d9d70730955ca4f9c Kapitel "Zufallszahlen erzeugen" in ''Java ist auch eine Insel''] nachgelesen werden. Das Beispiel unten zeigt die Verwendung der Klasse in einer einfachen Würfel-Klasse.
Weitere Details können in der [https://docs.oracle.com/javase/8/docs/api/java/util/Random.html Java API Dokumentation der Klasse Random] und im [http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_12_005.htm#mje4ad6e86a12fd27d9d70730955ca4f9c Kapitel "Zufallszahlen erzeugen" in ''Java ist auch eine Insel''] nachgelesen werden. Das Beispiel unten zeigt die Verwendung der Klasse in einer einfachen Würfel-Klasse.
Zeile 42: Zeile 43:


  /**
  /**
   * "Wirft" den Würfel, indem eine Zufallszahl zwischen 1 und 6 (einschließlich) generiert wird.
   * "Wirft" den Würfel, indem eine Zufallszahl zwischen 1  
  * und 6 (einschließlich) generiert wird.
   * @return Eine Ganzzahl von 1 bis 6
   * @return Eine Ganzzahl von 1 bis 6
   */
   */

Aktuelle Version vom 8. Februar 2022, 08:16 Uhr

Zufallszahlen generieren

Obwohl wir in unserem Leben vom Zufall umgeben sind, ist das Erzeugen von Zufallszahlen in technischen Systemen nicht einfach. Tatsächlich gibt es so etwas wie einen echten Zufallsgenerator nicht, sondern immer nur sogenannte Pseudozufallszahlengeneratoren. Pseudozufall bedeutet, dass die erzeugten Zahlen zufällig wirken, aber in Wirklichkeit aufgrund mathematischer Verfahren erzeugt werden.

Java bietet verschiedene Methoden, Zufallszahlen zu erzeugen. Diese basieren auf der Methode Math.random(), die eine Pseudozufallszahl zwischen 0 (inklusive) und 1 (exklusive) erzeugt. Diese Fließkommazahlen können dann durch Rechenoperationen in den gewünschten Zahlenbereich transformiert werden.

Um einen Würfel zu simulieren, kann man die von Math.random() generierten Werte zum Beispiel durch (int) (Math.random()*6+1) in eine Ganzzahl zwischen 1 (inklusive) und 6 (inklusive) transformieren. Die Grafik veranschaulicht, wie die einzelnen Rechnungen den Zahlenbereich Schritt für Schritt transformieren.

Transformation von Zufallszahlen in einen bestimmten ganzzahligen Bereich (Java).
Icon Info.png

Im letzten Schritt wird eine explizite Typumwandlung vorgenommen: eine erzwungene Konvertierung von einem Datentyp (double) in einen anderen (int). In diesem Fall bedeutet das, dass Java einfach die Nachkommastellen des double-Wertes "abschneidet" (es wird also nicht gerundet). Aus 4.866 wird 4.


Weitere Informationen zu Zufallszahlen (speziell in Java):

Die Klasse Random

Zur einfachen Generierung von Zufallszahlen stellt Java die Hilfsklasse java.util.Random zur Verfügung. Die enthält eine Reihe von Methoden, die unter anderem zufällige Ganzzahlen erzeugen.

Weitere Details können in der Java API Dokumentation der Klasse Random und im Kapitel "Zufallszahlen erzeugen" in Java ist auch eine Insel nachgelesen werden. Das Beispiel unten zeigt die Verwendung der Klasse in einer einfachen Würfel-Klasse.

Eine einfache Würfel-Klasse

import java.util.Random;

public class Wuerfel {
 private Random zufall;

 public Wuerfel() {
  // Neues Objekt der Klasse "Random" erstellen
  zufall = new Random();
 }

 /**
  * "Wirft" den Würfel, indem eine Zufallszahl zwischen 1 
  * und 6 (einschließlich) generiert wird.
  * @return Eine Ganzzahl von 1 bis 6
  */
 public int werfen() {
  // nextInt(int) generiert eine Zufallszahl n mit 0 <= n < 6
  return zufall.nextInt(6)+1;
 }
}