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.