class AutomatMitDatenstruktur{

  // Anfang Variablen
  private int anzE=4; private int anzA=4; private int anzS=4; // Anzahl der Eingabezeichen, Ausgabezeichen und Zustände
  private int e=0;  //aktuellles Eingabezeichen
  private int a=0;  //aktuelles Ausgabezeichen
  private int s=0;  //aktueller Zustand
  private String [] E = new String[anzE]; //Eingabetexte (optional)
  private String [] A = new String[anzA]; //Ausgabetexte (optional)
  private String [] S = new String[anzS]; //Zustandstexte (optional)
  private int [] [] u= new int [anzS] [anzE]; //Überführungsmatrix
  private int [] [] g= new int [anzS] [anzE]; //Ausgabematrix
  
  AutomatMitDatenstruktur(){
    erzeugeTexte();
    bildeAutomat();
  }
  private void bildeAutomat (){// Erstellen des Automaten als Zustands- und Ausgabematrix
     u[0][0]=1; u[0][1]=3; u[0][2]=0; u[0][3]=0; g[0][0]=0; g[0][1]=0; g[0][2]=2; g[0][3]=2;
     u[1][0]=1; u[1][1]=2; u[1][2]=0; u[1][3]=0; g[1][0]=0; g[1][1]=0; g[1][2]=4; g[1][3]=4;
     u[2][0]=1; u[2][1]=2; u[2][2]=1; u[2][3]=3; g[2][0]=5; g[2][1]=0; g[2][2]=1; g[2][3]=4;
     u[3][0]=1; u[3][1]=3; u[3][2]=0; u[3][3]=3; g[3][0]=5; g[3][1]=0; g[3][2]=3; g[3][3]=2;
  }
  private void erzeugeTexte(){
    E[0]="";E[1]="";E[2]="";E[3]="";
    A[0]="";A[1]="";A[2]="";A[3]="";
    S[0]="";S[1]="";S[2]="";S[3]="";
  }
  public int U(int e){
   s= u[s][e];
   return s;
  }
  public int G(int e){
   a= g[s][e];
   return a;
  }
  public String getE(int e){
    return E[e];
  }
  public String getA(int a){
    return A[a];
  }
  public String getS(int s){
    return S[s];
  }
 }

