fiebig.schule

03 Automaten in Java | Teil 1

🟪 Codeanalyse

Gegeben ist die folgende Methode, die einen einfachen DEA mit Zustandsmenge Q = { q 0 , q 1 , q 2 } Q = \{ q_0, q_1, q_2 \} über dem Alphabet A = { x , y } A = \{ x, y \} implementiert.

EinfacherDEA.java
    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

  1. 👤 Führe die Methode in einer Entwicklungsumgebung deiner Wahl für verschiedenen Eingaben aus.
  2. 👤 Notiere einen das Zustandsübergangsdiagramm des Automaten und die vom Automaten akzeptierte Sprache L L .
  3. 👤 Notiere die zwei String-Methoden, die in der Methode verwendet werden.
  4. 👤 Ä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 Klasse String 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 etwa ArrayList 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 ( 1 -1 ) 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.