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