/** Diese Klasse erzeugt eine Reihe von Zufallszahlen,
  * die man in Form einer Folge durchlaufen kann.
  **/
public class Aufzaehlung {

  /** Feld von Zufallszahlen */
  private double[] zahlen;

  /** Konstruktor. Erzeugt ein Objekt mit
    * n Zufallszahlen
    */
  public Aufzaehlung(int n) {
    zahlen = new double[n];
    for (int i = 0; i < n; i++)
      zahlen[i] = Math.random();
  }

  /** Gibt die Anzahl der gespeicherten Zahlen aus */
  public int length() {
    return zahlen.length;
  }

  /** Gibt die i-te Zufallszahl zurueck */
  public double getZahl(int i) {
    return zahlen[i];
  }

  /** Erzeuge eine Folge, die den Inhalt
    * repraesentiert.
    */
  public Folge folge() {
    return new Folge() {
      /** Ein Zaehler zeigt an, bei welchem Element wir sind */
      private int zaehler = 0;

      /** Zeigt an, ob es noch mehr Elemente gibt */
      public boolean elementeVerfuegbar() {
        return zaehler < zahlen.length;
      }

      /** Gibt das naechste Element zurueck
       * und erhoeht den Zaehler
       */
      public Object naechstesElement() {
        // Wandle die double-Zahl in ein Objekt um
        Double res = new Double(zahlen[zaehler]);
        // Erhoehe den Zaehler
        zaehler++;
        // Gib das Ergebnis zurueck
        return res;
      }
    }; // Ende der anonymen Klasse
  }
  
  
  /** Main-Methode. Erzeugt ein Zahlenfeld der
    * Laenge 10 und gibt die Zahlen aus.
    */
  public static void main(String[] args) {
    Aufzaehlung zahlen = new Aufzaehlung(10);
    for (Folge f = zahlen.folge();
         f.elementeVerfuegbar();
         System.out.println(f.naechstesElement())
        ) ;
  }
}
