03 Automaten in Java
🟪 Codeanalyse
👾 Codebeispiel
Gegeben ist die folgende Methode, die einen einfachen DEA mit Zustandsmenge über dem Alphabet implementiert.
public boolean pruefeWort(String wort) {
int aktuellerZustand = 0;
int akzeptierenderZustand = 2;
for (int i = 0; i < wort.length(); i++) {
char c = wort.charAt(i);
if (aktuellerZustand == 0) {
if (c == 'x')
aktuellerZustand = 1;
else if (c == 'y')
aktuellerZustand = 0;
else
aktuellerZustand = -1;
} else if (aktuellerZustand == 1) {
if (c == 'x')
aktuellerZustand = 1;
else if (c == 'y')
aktuellerZustand = 2;
else
aktuellerZustand = -1;
} else if (aktuellerZustand == 2) {
if (c == 'x')
aktuellerZustand = 1;
else if (c == 'y')
aktuellerZustand = 0;
else
aktuellerZustand = -1;
}
else
break;
}
if (aktuellerZustand == akzeptierenderZustand)
return true;
else
return false;
}
🌱 Aufgaben | Erkundung des Codebeispiels
- 👤 Führe die Methode in einer Entwicklungsumgebung deiner Wahl für verschiedenen Eingaben aus.
- 👤 Notiere einen das Zustandsübergangsdiagramm des Automaten und die vom Automaten akzeptierte Sprache .
- 👤 Notiere die zwei String-Methoden, die in der Methode verwendet werden.
🤨 Achtung: Verwechslungsgefahr
- Die Methode
int length()(mit Klammern!) ist eine Methode der KlasseStringund gibt die Anzahl der Zeichen eines Strings zurück. - Mit
length(ohne Klammern!) wird die Länge eines Arrays abgefragt. Dies ist ein öffentliches Attribut und keine Methode. - Mit der Methode
size()kann in manchen Java-Klassen wie etwaArrayListdie Anzahl der von der Datenstruktur verwalteten Objekte abgefragt werden.
☝️ Hinweise
- Das Schlüselwort
breaksorgt dafür, dass die Schleife verlassen wird. Das tritt ein, sobald die Zustandsabfolge in einen ungültigen Zustand () wechselt. - Bestehen die if- und else-Zweige einer Verzweigung lediglich aus einer Anweisung, können die geschweiften Klammern weggelassen werden.
- Statt Zeile 33-36 kann man auch die Kurzschribweise
return aktuellerZustand == akzeptierenderZustandverwenden.
🟦 Fallunterscheidungen mit Mehrfachverzweigungen
🌱 Aufgaben | Erweiterung mit Switch-Case
- 👤 Bearbeite die Übungsaufgaben zu Switch-Case.
- 👤 Erweitere die bisherige DEA-Implementierung um Switch-Case-Anweisungen zur Unterscheidung des aktuellen Zustands.
- 👤 Erweitere die Implementierung nun um Switch-Case-Anweisungen zur Unterscheidung des aktuellen Eingabezeichens.
🏃♀️ Extras
- Man könnte sich überlegen, die Zustände mit Hilfe von Enums zu realisieren; für unsere Fälle reichen durchnummierete Zustände in einer Ganzzahlvariable gespeichert vollkommen aus.
- Implementiere mit Hilfe der Klasse Stack einen einfachen Kellerautomaten!
