Automat

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 + "]";
	}
	
}