Enumeration "verspricht" die Implementierung der folgenden Methoden:
Die für unseren Fall passende Implementierung ist unten angegeben.
//LinkedList.java import java.util.*; public class LinkedList { // interface Verkettungselement public static interface Linkable { public Linkable getNext(); public void setNext(Linkable n); } // kopf der liste: Linkable head; // vorne einfügen: (entspricht dem vorigen insert(Linkable n) public void insert_front(Linkable n) { n.setNext(head); head = n; } // hinten einfügen: (NEU!) public void insert_back(Linkable n) { if (head == null) head = n; else { Linkable tmp = head; while (tmp.getNext() != null) tmp = tmp.getNext(); tmp.setNext(n); } } // Kopfzugriff: public Linkable getHead() { return head; } // und hier der Iterator zum Listendurchlauf: class lili_iterator implements Enumeration { Linkable pos = head; public boolean hasMoreElements() { return pos != null; } public Object nextElement() throws NoSuchElementException { if (pos == null) throw new NoSuchElementException("Lili"); else { Object res = pos; pos = pos.getNext(); return res; } } } }
Anmerkung:
Im Hauptprogramm wird der Iterator durch Enumeration e = li.new lili_iterator() direkt erzeugt. Dies geht weil wir die innere Elementklasse lili_iterator hier public deklariert haben (vgl. Folie 85).
Idee für die Implementierung der Klasse Scrabble:
Der Vollständigkeit halber ist hier auch das Hauptprogramm mit angegeben.
// Scrabble.java public class Scrabble { public static boolean geht(String vorat, String wort) { boolean benutzt[] = new boolean[vorat.length()]; for (int i = 0; i < benutzt.length; i++) benutzt[i] = false; // fuer jeden Buchstaben in wort for (int i = 0; i < wort.length(); i++) { // fuer die Buchstaben in vorat int j; for (j = 0; j < vorat.length(); j++) { if (wort.charAt(i) == vorat.charAt(j) && !benutzt[j]) { // den nehmen wir benutzt[j] = true; break; // naechste Runde in der äusseren Schleife } } if (j == vorat.length()) // Buchstabe wort.charAt(i) ist nicht verfügbar return false; } return true; } } // ScrabbleMain.java import java.io.*; public class ScrabbleMain { public static void main(String argv[]) throws java.io.IOException { String vorat = argv[0]; //eingegebener Buchstabenvorrat File f = new File("german.3-6"); //das Wörterbuch BufferedReader in = new BufferedReader(new FileReader(f)); for (;;) // forever { String line = in.readLine(); if (line == null) //nichts mehr zu lesen break; if (Scrabble.geht(vorat, line)) //Wort aus Vorrat erzeugbar? System.out.println(line); //ja, also ausgeben! } } }
Der Aufruf java ScrabbleMain ESTHER erzeugt beispielsweise die folgende Ausgabe:
EHE
EHER
EHRE
EHRST
EHRT
EHRTE
ERST
ETH
HEER
HEERS
HER
REH
REHE
REST
RESTE
SEE
SEH
SEHE
SEHER
SEHR
SEHT
SET
STE
STEH
STEHE
STEHER
TEERS
THE
THER
THESE