Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


16.1.5

Enumeration


Enumeration ist nicht mit obigen Datenstrukturen, die durch Klassen repräsentiert werden, vergleichbar, wird aber trotzdem an dieser Stelle aufgeführt, da sie ebenso Zugriff auf Daten bietet. Enumeration ist ein Inferface, das dazu verwendet wird, eine Aufzählung von Elementen anzugeben. Dieses Interface wird z. B. von der Klasse StringTokenizer implementiert. Eine Klasse, die Enumeration implementiert, muss die folgenden Methoden überschreiben: Manche Methoden liefern als Ergebnis ein Exemplar dieses Interface, wie z. B. getApplets(). Über dieses Exemplar kann man auf die Elemente, die in der Aufzählung enthalten sind, zugreifen. Bei jedem Aufruf von nextElement() wird ein neues Element geliefert, bis alle Elemente der Aufzählung zurückgegeben wurden. Man kann auf eine Aufzählung also nicht wie bei einem Array oder der Klasse Vector über einen Index zugreifen, sondern muss ein Element nach dem anderen über nextElement() anfordern. Es ist nicht möglich, ein Element ein zweites Mal anzufordern.

Das folgende Beispiel zeigt, wie man Enumeration selbst implementieren kann:
  import java.util.Enumeration;
  import java.io.*;
  
  public class EnumerationDemo {
    static PrintWriter stdout = new PrintWriter(System.out,true);
  
    public static void main(String args[]) {
      // Überprüfung der Parameteranzahl
      if (args.length == 1) {
        try {
          // Divider mit der übergebenen Zahl initialisieren
          Divider d = new Divider(Integer.parseInt(args[0]));
          // Alle Teiler der Zahl ausgeben
          while(d.hasMoreElements())
            stdout.println((
                        (Integer)d.nextElement()).intValue());
        }
        catch(NumberFormatException e) {
          stdout.println("Error: "+e);
        }
      }
      else
        stdout.println("Illegal number of arguments");
    }
  }
  
  class Divider implements Enumeration {
    // Zahl, deren Teiler ermittelt werden soll
    private int number;
    // Zähler, der einen möglichen Teiler darstellt
    private int value = 0;
  
    public Divider(int number) {
      // Zahl speichern
      this.number = number;
    }
  
    public boolean hasMoreElements() {
        // Ist der Zähler kleiner als die Zahl?
        if (value < number)
          // Dann sind noch nicht alle Teiler gefunden
          return true;
        else
          // Sonst sind alle Teiler gefunden
          return false;
    }
  
    public Object nextElement() {
      double div;
      do {
        // Sind noch nicht alle Teiler gefunden?
        if (value < number)
          // Zähler
          value++;
        // Zahl durch möglichen Teiler dividieren
        div = (double)number / (double)value;
      }
      // Wenn kein Divisionsrest vorhanden ist
      // oder der mögliche Teiler gleich der Zahl ist,
      // wurde ein Teiler gefunden
      while (((div - Math.floor(div)) != 0)
                       && (value < number));
      return new Integer(value);
    }
  }
Die Klasse Divider erlaubt dem Benutzer den Zugriff auf die Teiler einer Zahl. Die Zahl, deren Teiler gesucht wird, übergibt man dem Konstruktor. Sind noch nicht alle Teiler zurückgeliefert, liefert hasMoreElements() true, durch Aufruf von nextElement() wird ein weiterer Teiler zurückgegeben.


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.