Im Kapitel 1.2 wird ein endlicher Automat als ein Computer, der eine Eingabe abarbeitet, betrachtet. In dieser Aufgabe sollen Sie dieses Modell als eine Javaklasse realisieren.
Ein Automat sei generisch über das Alphabet und die Menge der Zustände.
Ein Automat ist eine Abbildung von Alphabet-Zustands-Paaren auf einen Nachfolgezustand.
Es gibt einen festen Anfangszustand und eine Menge von Endzuständen.
Die Eingabe wird durch einen Iterator über das Alphabet dargestellt.
Implementieren Sie die folgenden Methoden:
Als Beispiel ist der erste Automat aus dem Skript formuliert.
public class Pair<A, B> { private A _e1; private B _e2; public Pair(A _e1, B _e2) { super(); this._e1 = _e1; this._e2 = _e2; } public A e1() {return _e1;} public B e2() {return _e2;} @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((_e1 == null) ? 0 : _e1.hashCode()); result = prime * result + ((_e2 == null) ? 0 : _e2.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Pair other = (Pair) obj; if (_e1 == null) { if (other._e1 != null) return false; } else if (!_e1.equals(other._e1)) return false; if (_e2 == null) { if (other._e2 != null) return false; } else if (!_e2.equals(other._e2)) return false; return true; } @Override public String toString() { return "Pair [_e1=" + _e1 + ", _e2=" + _e2 + "]"; } }