Java – Station6: Automatisch rechnen St ah tür l- Fall tür Geheimtü r Eic h g an rh Vo ent ür Diese Station verschafft Ihnen einen kleinen Einblick in die Automatentheorie. Haus 1. Das Verlies tür Nebenstehende Figur soll die Zimmer einer Burg charakterisieren, wie sie ein Hof Anwender Ihres Programms am Ende durchlaufen kann. Man sagt die Zimmer sind Gang „Zustände“ (states) und die Türen sind „Übergänge“ (transitions). Eine solche Situation tritt in der Informatik immer wieder auf, z.B. beim Einlesen von Realzahlen, beim Verwenden von Dateinamen, beim Übersetzen von Java – Quelltext, Interpretieren von Java – Bytecode oder beim Suchen von Worten in MS-Word. KaminDer Name „Automatentheorie“ (state-machines) kommt daher, dass auch zimmer Treppe Fahrkartenautomaten mit dieser Theorie beschrieben werden können. Betrachten Sie sich das Verlies nochmals in einer Tabelle bei der die Zustände in Zeilen, die Übergänge in Spalten aufgetragen sind. Beide Formen der Darstellung Schiebe -regal werden zu Beschreibung von Automaten eingesetzt: Katakomben Keller Haustür Gang Hof - Hof Gang Kaminzimmer Treppe Keller Katakomben Eichentür Kaminzimmer Gang - Vorhang Treppe Gang - Stahltür Keller Treppe - Falltür Katakomben - 2. MyStateMachine Zustand Wiederhole Hof Gang Kaminzimmer Ausgabe: "Vor dem Haus: -> Haustür -> Spielende" Ausgabe: "Im Gang: -> Eichentür -> Vorhang" Ausgabe: "Im Kaminzimmer: -> Falltür -> Eichentür" Lies Übergang Lies Übergang Lies Übergang Übergang Übergang Übergang Haustür Spielende Eichentür Vorhang Falltür Eichentür Zustand= Gang Zustand= Ende Zustand= Kaminzi. Zustand= Treppe Zustand= Katakom. Zustand= Gang Schieberegal Katakomben Keller Geheimtür Hof Algorithmus Neben der Theorie der Automaten ( über die noch vieles mehr gesagt werden könnte ) gibt es auch Verfahren, wie sie programmiert werden können; und ein Algorithmus wird Ihnen nun hier vorgestellt: Der Trick ist eine verschachtelte Mehrfachauswahl innerhalb einer Schleife. Die erste Mehrfachauswahl betrifft den Zustand, die zweite die im Zustand möglichen Übergänge. Dieser Vorgang wird solange wiederholt, bis der „Ende“ – Zustand erreicht ist. bis Zustand = Ende import java.io.*; import PascalReader.*; import java.lang.*; class Dungeon { public static void main (String args[]) throws IOException { int state = 0; int transition; PascalReader in = new PascalReader( new InputStreamReader( System.in ) ); while ( state != -1 ) { switch (state) { case 0 : { System.out.println( "Du befindest Dich vor einem Haus" ); System.out.println( "0: Spiel beenden; 1: hineingehen" ); transition = in.readInt(); switch (transition) { case 0 : { state = -1; break; } case 1 : { state = 1; break; } } break; } case 1 : { System.out.println( "Du befindest Dich im Haus!" ); System.out.println( "Ab hier wird noch programmiert!" ); state = -1; break; } } } System.out.println( "Ende" ); in.readLine(); }