Deterministischer endlicher Automat

Hallo Leute,
ich habe muss einen DEA programmieren, dieser soll überprüfen ob ein vorgegebenes Eingabewort korrekt ist und dann ein Ergebnis ausgibt.
Die Eingabe und Ausgabe soll mit Klasse JOptionPane stattfinden (Ausgabe wie im Bild).
Die Eingabezeichen sind [ O , - , 4 , i ]
Der gesamte Programmablauf soll in der Methode public static void main entahlten sein.
kriege fehlermeldung wenn ich versuche JOptionPane einzufügen.
Das was ich bis jetzt habe ist dies:

public class DEA22 {

	public static char q = 'O';
	public static char w = '-';
	public static char e = '4';
	public static char r = 'i';

   public static void main(String[] args){
       String [] Eingabewort = new String[] {"iOOO", "iOi4", "OOiO", "4O-4", "O-O-", "4iO4"};
       for (String string : Eingabewort) {
           if(gültigeeingabe(string)) {
               Ausführung(string);
           }
       }

   }

   public static boolean gültigeeingabe(String string) {
       if(string == null) {
           System.out.println("Variable string ist "null"");
           return false;
       }
       if(string.length() < 4) {
           System.out.println("Fehler: "" + string + "" ist keine gueltige Eingabe!");
           System.out.println("Min 4 Zeichen duerfen eingegeben werden!");
           return false;
       }
       if(string.length() > 4) {
           System.out.println("Fehler: "" + string + "" ist keine gueltige Eingabe!");
           System.out.println("Max 4 Zeichen duerfen eingegeben werden!");
           return false;
       }

       for(char c : string.toCharArray()) {
           if(c != q && c != w && c != e && c != r) {
               System.out.println("Fehler: "" + string + "" ist keine gueltige Eingabe!");
               System.out.println("Erlaubt sind nur folgende Zeichen: " + q + ", " + w + ", " + e + " oder " + r);
               return false;
           }
       }
       return true;
   }


   public static void Ausführung(String string) {
       char[] chars = string.toCharArray();
       int zustand = 1;

       for(char c : chars) {
           if(c == q) {
               switch (zustand) {
               case 0:
                   zustand = 3;
                   break;
               case 1:
                   zustand = 2;
                   break;
               case 2:
                   zustand = 2;
                   break;
               case 3:
                   zustand = 3;
                   break;
               case 4:
                   zustand = 0;
                   break;
               }
           }
           else if(c == w) {
               switch (zustand) {
               case 0:
                   zustand = 2;
                   break;
               case 1:
                   zustand = 0;
                   break;
               case 2:
                   zustand = 3;
                   break;
               case 3:
                   zustand = 3;
                   break;
               case 4:
                   zustand = 4;
                   break;
               }
           }
           else if(c == e) {
               switch (zustand) {
               case 0:
                   zustand = 2;
                   break;
               case 1:
                   zustand = 1;
                   break;
               case 2:
                   zustand = 2;
                   break;
               case 3:
                   zustand = 3;
                   break;
               case 4:
                   zustand = 4;
                   break;
               }
           }
           else if(c == r) {
               switch (zustand) {
               case 0:
                   zustand = 0;
                   break;
               case 1:
                   zustand = 4;
                   break;
               case 2:
                   zustand = 4;
                   break;
               case 3:
                   zustand = 3;
                   break;
               case 4:
                   zustand = 3;
                   break;
               }
           }
       }
       System.out.println("Endzustand: " + zustand + "");
       if(zustand == 3)
           System.out.println("Das Word: "" + string + "" ist gueltig!");
       else
           System.out.println("Das Word: "" + string + "" ist nicht gueltig!");
   }
}

Ein Bild war da jetzt nicht dabei, und auch sonst wären mehr Details vielleicht hilfreich. “Irgendeine” Ausgabe mit einer JOptionPane wäre ja nicht so schwierig:

import javax.swing.JOptionPane;

public class DEA22 {
 
    public static char q = 'O';
    public static char w = '-';
    public static char e = '4';
    public static char r = 'i';
 
   public static void main(String[] args){
       String [] Eingabewort = new String[] {"iOOO", "iOi4", "OOiO", "4O-4", "O-O-", "4iO4"};
       for (String string : Eingabewort) {
           if(gültigeeingabe(string)) {
               Ausführung(string);
           }
       }
 
   }
 
   public static boolean gültigeeingabe(String string) {
       if(string == null) {
           System.out.println("Variable string ist \"null\"");
           return false;
       }
       if(string.length() < 4) {
           System.out.println("Fehler: \"" + string + "\" ist keine gueltige Eingabe!");
           System.out.println("Min 4 Zeichen duerfen eingegeben werden!");
           return false;
       }
       if(string.length() > 4) {
           System.out.println("Fehler: \"" + string + "\" ist keine gueltige Eingabe!");
           System.out.println("Max 4 Zeichen duerfen eingegeben werden!");
           return false;
       }
 
       for(char c : string.toCharArray()) {
           if(c != q && c != w && c != e && c != r) {
               System.out.println("Fehler: \"" + string + "\" ist keine gueltige Eingabe!");
               System.out.println("Erlaubt sind nur folgende Zeichen: " + q + ", " + w + ", " + e + " oder " + r);
               return false;
           }
       }
       return true;
   }
 
 
   public static void Ausführung(String string) {
       char[] chars = string.toCharArray();
       int zustand = 1;
 
       for(char c : chars) {
           if(c == q) {
               switch (zustand) {
               case 0:
                   zustand = 3;
                   break;
               case 1:
                   zustand = 2;
                   break;
               case 2:
                   zustand = 2;
                   break;
               case 3:
                   zustand = 3;
                   break;
               case 4:
                   zustand = 0;
                   break;
               }
           }
           else if(c == w) {
               switch (zustand) {
               case 0:
                   zustand = 2;
                   break;
               case 1:
                   zustand = 0;
                   break;
               case 2:
                   zustand = 3;
                   break;
               case 3:
                   zustand = 3;
                   break;
               case 4:
                   zustand = 4;
                   break;
               }
           }
           else if(c == e) {
               switch (zustand) {
               case 0:
                   zustand = 2;
                   break;
               case 1:
                   zustand = 1;
                   break;
               case 2:
                   zustand = 2;
                   break;
               case 3:
                   zustand = 3;
                   break;
               case 4:
                   zustand = 4;
                   break;
               }
           }
           else if(c == r) {
               switch (zustand) {
               case 0:
                   zustand = 0;
                   break;
               case 1:
                   zustand = 4;
                   break;
               case 2:
                   zustand = 4;
                   break;
               case 3:
                   zustand = 3;
                   break;
               case 4:
                   zustand = 3;
                   break;
               }
           }
       }
       System.out.println("Endzustand: " + zustand + "");
       if(zustand == 3)
           System.out.println("Das Word: \"" + string + "\" ist gueltig!");
       else
           System.out.println("Das Word: \"" + string + "\" ist nicht gueltig!");
       
       JOptionPane.showMessageDialog(null, "Hier koennte ihre Werbung stehen");
   }
}

hi marco,
danke für deine antwort.
Die Ausgabe des Programms, soll wie in Bild 2 aussehen und der Automat ist wie auf dem Bild 1 zu programmieren.
der Code sollte richtig sein, wie kriege ich es hin, dass ich die einzelnen Buchstaben [ O , - , 4 , i ] in dialogfenster eingebe und das programm mir die ausgabe wie auf dem Bild 2 im system.out ausgibt?

Ausgaben (etwa der Ergebnisse) mit JOptionPane sollte das Minimum sein was selbst zu schaffen oder nun praktisch under jeder Suche zu JOptionPane zu finden,
wenn noch nicht schön formatiert kann man weiter drüber sprechen, aber bisher ist ja gar nichts da
(ok, Programm mit System.out ist schon sehr viel da, fehlt bei anderen Fragern auch, insofern Lob :wink: )

‚kriege fehlermeldung wenn ich versuche JOptionPane einzufügen.‘ enthält wenig,
keinen Codeversuch, keine exakte Fehlermeldung,


Eingaben mit JOptionPane sind nicht ganz so leicht zu finden, hier ein Link der gut ausreichen sollte:
https://de.wikibooks.org/wiki/Java_Standard:_Grafische_Oberflächen_mit_Swing:_Top_Level_Container:_javax_swing_JOptionPane

An der geposteten Ausgabde sehe ich jetzt auch nichts mit einer JOptionPane. Ist der Thread absichtlich “erledigt”?

So, auch Gäste dürfen Themen als „offen“/„geschlossen“ markieren … ?
Und zu der Frage, soweit ist alles (relativ) richtig,
zu Beginn (oder zum Schluss) der Schleife (Application main logic) muss allerdings obige Ausgabe erfolgen (Zeile printen…) und auch nochmal der Endzustand geprüft werden.
Den DEA hätte ich vielleicht etwas anders geschrieben, naja was soll’s? :slight_smile: