03 Automaten in Java | Teil 1
🟪 Codeanalyse
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 und Hinweise
- 👤 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.
- 👤 Ändere den Programmcode so um, dass er die Unterscheidung der Zustände mit Hilfe einer Switch-Anweisung realisiert. 💁 Übungsaufgaben zu Switch-Case.
🤨 Achtung: Verwechslungsgefahr
- Die Methode
int length()
(mit Klammern!) ist eine Methode der KlasseString
und 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 etwaArrayList
die Anzahl der von der Datenstruktur verwalteten Objekte abgefragt werden.
☝️ Hinweise
- Das Schlüselwort
break
sorgt 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 == akzeptierenderZustand
verwenden.