Advanced   Java   Services Random Back Next Up Home

Random

Für die Klasse Random benötigt man das Import java.util.*;

Randomobjekte sind Zufallsgeneratoren, die nach einem mathematischen Algorithmus Zahlen liefern, deren Aufeinanderfolge einen zufälligen Ablauf simuliert. Randomobjekte können "zufällige" int, long, float, und double produzieren, des weiteren double-Zahlen, die eine Gauss'sche Normalverteilung simulieren.

Man kann sich das etwa so vorstellen, daß Randomobjekte eine lange Folge von Zahlen halten, deren Aufeinanderfolge zufällig erscheint. Welche Zahl als erste in dieser Reihe von einer Methode geliefert wird, bestimmt man über den Konstruktor. Der Konstruktor setzt quasi eine Art Zeiger auf die Zahl, die beim ersten Aufruf von nextXxx() geliefert wird. Der Defaultkonstruktor setzt diesen Zeiger in Abhängigkeit von der Systemzeit, sodaß man nicht weiß, wo der Anfangspunkt liegt. Der Konstruktor mit einem Parameter setzt den Zeiger abhängig vom Parameter immer auf die gleiche Stelle, so daß man auf diese Weise immer die selbe Zahlenfolge erhält. Das ist zum Austesten von Programmen, die einen zufälligen Ablauf simulieren, äußerst wichtig.

Wichtige Konstruktoren
Random()
 
Creates a new random number generator.
Random(long seed)
 
Creates a new random number generator using a single long seed.
Wichtige Methoden
Returntyp Name der Methode
double
 
 
 
nextDouble()
Returns the next pseudorandom, uniformly distributed double value between 0.0 (inclusive) and 1.0 (exclusive) from this random number generator's sequence.
(Analog produziert nextFloat() float-Zahlen zwischen 0.0 und 1.0)
double
 
 
nextGaussian()
Returns the next pseudorandom, Gaussian ("normally") distributed double value with mean 0.0 and standard deviation 1.0 from this random number generator's sequence.
int
 
 
 
nextInt()
Returns the next pseudorandom, uniformly distributed int value from this random number generator's sequence. All 232 possible int values are produced with (approximately) equal probability.
(Analog produziert nextLong() long-Zahlen im gesamten Wertebereich von long)
int
 
 
nextInt(int n)
Returns a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence.
void
 
setSeed(long seed)
Sets the seed of this random number generator using a single long seed.

Das folgende Beispiel erzeugt vier Mal sechs Lottozahlen, die letzten beiden Serien sind identisch, weil man den gleichen Kontruktoraufruf verwendet.

import java.util.*;

public class RandomDemo
{
   public static void main(String args[])
   {
      int lottoZahl[] = new int[6] ;
      Random rd = new Random(); // Zufallsgenerator erzeugen

      for(int i=0; i<lottoZahl.length; i++)
      {
         lottoZahl[i] = rd.nextInt(49) + 1 ;
         System.out.print(lottoZahl[i]+"\t");
      }
      System.out.println("\n--------------------");

      try{ Thread.sleep(1000); } catch(Exception ex) {}
      // jetzt hat sich die Systemzeit um eine Sekunde geändert

      rd = new Random();  // neuer Zufallsgenerator
      for(int i=0; i<lottoZahl.length; i++)
      {
         lottoZahl[i] = rd.nextInt(49) + 1 ;
         System.out.print(lottoZahl[i]+"\t");
      }
      System.out.println("\n--------------------");

      rd = new Random(2);  // neuer Zufallsgenerator mit Startindex 2
      for(int i=0; i<lottoZahl.length; i++)
      {
         lottoZahl[i] = rd.nextInt(49) + 1 ;
         System.out.print(lottoZahl[i]+"\t");
      }
      System.out.println("\n--------------------");

      rd = new Random(2);  // neuer Zufallsgenerator mit gleichem Startindex
      for(int i=0; i<lottoZahl.length; i++)
      {
         lottoZahl[i] = rd.nextInt(49) + 1 ;
         System.out.print(lottoZahl[i]+"\t");
      }
      System.out.println("\n--------------------");

   }

}

Die Ausgabe der der ersten beiden Tips ist nicht vorhersehbar, die letzten beiden Serien sollten aber auf ihrem Rechner auch erscheinen.

15, 10, 29, 13, 27, 22

20,  7, 32, 41,  1, 11

48,  2, 12, 12, 34, 16

48,  2, 12, 12, 34, 16

Hier sieht man schon, daß für die Simulation eines Lottospiels mehr zu tun ist, als nur nextInt() aufzurufen.


Übungen

Übungen zu Random

Valid XHTML 1.0 Strict top Back Next Up Home