# Fast- Food- Automat



## maceta (4. Nov 2012)

Hallo ihr Lieben,
ich bin leider absoluter Java neuling und komplett mit der folgenden Aufgabe überfordert...
Die Aufgabe war eine Automaten zu programmieren, der ein Menü auf seine Gültigkeit testet.Dabei gab folgende Bedingungen:
Es muss genau ein Burger gewählt werden (hier als B) und es dürfen 'beliebig' viele Beilagen (hier P, weil ich einfach mal von Pommes ausgegangen bin ) gewählt werden, jedoch darf das Menü höchstes aus 3 Produkten bestehen. Nachdem eine Beilage gewählt wurde dürfen beliebig viele Soßen dazu gewählt werden ( hier S), eine Soße zählt nicht als Produkt.
Nun zu meinem Programm: es läuft soweit kompiliert nur der entscheide Fehler liegt eben genau da, was das Programm ausmacht  egal was man eingibt, er sagt mir IMMER das Menü wäre gültig.
Kann mir jemand helfen? 

Vielen Dank 

```
public class Automat {

  public static void main(String[] argv) {


     final byte S = 0;
     final byte B  = 1;
     final byte P  = 2;

     byte status = 0;

     byte [][] uebergang=

     new byte [][]{
     {1,4,4},
     {4,2,4},
     {4,3,2},
     {4,4,3},
     {4,4,3},
     };
 char eingabe;
     do {
     eingabe = IO.readChar ("Nächste Aktion" + "(b(urger),(p(ommes),(s(auce)): ");

     switch (eingabe) {
     case 'b': case 'B':
     status= uebergang[status][B];
     break;
     case 'p': case 'P':
     status= uebergang[status][P];
     break;
     case 's': case 'S':
     status= uebergang[status][S];
     break;

     case '\n':
     IO.println ("Das Menue ist gültig");
     break;
     default:
     IO.println ("Ungueltiges Zeichen, bitte nocheinmal.");
     break;
     }
  }
     }while (eingabe !='\n');
  }
}
```


----------



## Marcinek (4. Nov 2012)

Sobald Enter gedrückt wird, kommt 
	
	
	
	





```
IO.println ("Das Menue ist gültig");
```
 und das IMMER. Wo ist die Abfrage gültig ioder nicht?


----------



## maceta (4. Nov 2012)

Okay,
also ehrlich gesagt dachte ich (wir haben in der letzten Vorlesung erst mit Arrays angefangen), dass das automatisch über das array entschieden wird?
könntest du mir sagen, oder zumindest einen Tipp geben, wie ich das jetzt noch mit einbinde? :/


----------



## maceta (4. Nov 2012)

Okay, ich habe es jetzt soweit 
Das Programm kompiliert auch, nun sitze ich allerdings an der Stelle, dass wenn ich meine 'Bestellung' eingebe, jedes Mal ausgegeben wird, dass das Menü gültig ist, dass es NICHT gültig ist UND dass ein ungültiges Zeichen eingegeben wurde.
Mein Programm sieht mittlerweile so aus: Ich vermute, dass nur iwo eine Klammer falsch ist oder etwas in der falschen Reihenfolge, aber vllt sieht das ja wer? :/

```
public class Automat {
 
  public static void main(String[] argv) {
 
     final byte S = 0;
     final byte B  = 1;
     final byte P  = 2;
 
     byte status = 0;  byte [][] uebergang=

     new byte [][]{
     {1,4,4},
     {4,2,4},
     {4,3,2},
     {4,4,3},
     {4,4,3},
     };

     char eingabe;
     do {
     eingabe = IO.readChar ("Nächste Aktion" + "(b(urger),(p(ommes),(s(auce)): ");

     switch (eingabe) {
     case 'b': case 'B':
     status= uebergang[status][B];
     counter++;
     burgercounter++;
     break;
     case 'p': case 'P':
     status= uebergang[status][P];
     counter++;
     break;
     case 's': case 'S':
     status= uebergang[status][S];
     counter ++;
     break;
     default:
     IO.println ("Ungueltiges Zeichen, bitte nocheinmal.");
     break;
     }
     }while (eingabe !='\n');
     if (counter < 1 || counter > 3)
     IO.println ("Das Menue ist nicht gültig");
     if (burgercounter == 0 || burgercounter >1)
     IO.println ("Das Menue ist nicht gültig");
     else
     IO.println ("Das Menue ist gültig");
 }
}
```


----------



## Marcinek (4. Nov 2012)

Also das wird schon über das uebergang Array entschieden.

Das ist ja ein einfacher automat: Endlicher Automat ? Wikipedia

Jetzt muss man halt auf dem blatt die zustände und übergänge planen.

Zustand hat eine nummer und ist entweder akzeptierend oder nicht.

Dann läufst du über den automaten drüber und am ende entscheidest du akzeptiert oder nicht.

---
Deine zähler dinger sind komplett falsch. Deswegen will ich das jetzt nicht weiter kommentieren.


----------



## TryToHelp (5. Nov 2012)

Ungueltiges Zeichen, bitte nocheinmal. bekommst du da du es bei allen Zeichen auser b,p,s eingibst.
Soßen werden bei dir mitgezählt als teil, was ja nicht der fall sein soll, also burger, pomes, ketchup und Cola sind 4 und nicht 3 wie du es willst
Corect wird trotzdem asugegeben, da du ja einen bruger hast und somit nicht kein burger oder 2 burger hast ;-)


----------



## TryToHelp (5. Nov 2012)

So sollte dein code funktionieren, ist aber halt kein Endlicher Automat


```
public class Automat {
  public static void main(String[] argv) {
     char eingabe;
     do {
        eingabe = IO.readChar ("Nächste Aktion" + "(b(urger),(p(ommes),(s(auce)): ");
 
        switch (eingabe) {
           case 'b': case 'B':
              counter++;
              burgercounter++;
              break;
           case 'p': case 'P':
              counter++;
              break;
           case 's': case 'S':
              break;
           case '\n':
              break;
           default:
               IO.println ("Ungueltiges Zeichen, bitte nocheinmal.");
               break;
        }
     }while (eingabe !='\n');
     if (counter < 1 || counter > 3){
        IO.println ("Das Menue ist nicht gültig");
     }else{
        if (burgercounter == 0 || burgercounter >1){
           IO.println ("Das Menue ist nicht gültig");
        }else{
           IO.println ("Das Menue ist gültig");
        }
     }
 }
}
```


----------

