source: Java_Quellcode_SOOP_Vorlesung/arrays/EndlicherAutomat.java @ 238

Last change on this file since 238 was 238, checked in by tr, 8 years ago

Endlicher Automat mit Array

File size: 1.6 KB
Line 
1package eu.hsrw.tr.prog.vl.arrays;
2
3import java.util.Scanner;
4
5/**
6 * Demonstration zur Implementierung endlicher Automaten in Java mit
7 * einem Array für die Zustandsübergangsfunktion
8 *
9 * Beispiel: Teilbarkeit einer Binärzahl durch 3
10 *
11 * @author Thomas Richter
12 *
13 */
14public class EndlicherAutomat {
15
16    public static void main(String[] args) {
17        // Zustandsübergangsfunktion:
18        //
19        //                     |       neuer Zustand nach
20        // aktueller Zustand   |   Eingabe 0    |     Eingabe 1
21        //                     |                |
22        //           0         |       0        |         1
23        //           1         |       2        |         0
24        //           2         |       1        |         2
25        //
26        int[][] delta = {{0, 1}, {2, 0}, {1, 2}};
27       
28        // Binärzahl als String einlesen
29        Scanner scan = new Scanner(System.in);
30        System.out.print("Eingabe (Binärzahl): ");
31        String eingabe = scan.nextLine();
32       
33        // Startzustand setzen
34        int zustand = 0;
35       
36        // Eingabe zeichenweise durchgehen
37        for (int i = 0; i < eingabe.length(); i++) {
38            // aktuelles Zeichen der Eingabe
39            char ziffer = eingabe.charAt(i);
40           
41            // neuer Zustand: Eintrag in delta
42            // Zeile: aktueller Zustand
43            // Spalte: Eingabe
44            // ASCII-Code der Ziffer muss noch in 0 oder 1 transformiert werden
45            zustand = delta[zustand][ziffer - '0'];
46        }
47       
48        // eingegebene Zahl binär und dezimal ausgeben
49        System.out.print(eingabe + " (dezimal " + Integer.parseInt(eingabe, 2) + ")");
50   
51        // Der Automat akzeptiert die Eingabe, wenn der Endzustand 0 ist
52        System.out.println(" teilbar durch 3: " + (zustand == 0));
53    }
54}
Note: See TracBrowser for help on using the repository browser.