www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Softwaretechnik und Programmierung" - Endl. Automaten
Endl. Automaten < Softwaretechnik+Pro < Praktische Inform. < Hochschule < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Softwaretechnik und Programmierung"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Endl. Automaten: Aufgabe
Status: (Frage) beantwortet Status 
Datum: 16:42 So 10.06.2012
Autor: egal

Aufgabe
Es soll überprüft werden, ob das Eingegebene aus blanks, keinem oder einem Vorzeichen '+' bzw. '-' und aus sonst nur Ziffern besteht, d.h. als eine formal korrekte ganze Zahl zu interpretieren ist i.S.d. endlichen Automaten.

Quellcode dazu:

import eip.*;

public class DigitAutomat2
{

   public static boolean digitCheck2(String inputString)
   {
   int q = 2;
   boolean zeichenTest = true;
   for (int i = 0; i < inputString.length(); i++)
   {
   char Zeichen = inputString.charAt(i);
   switch (q)
   {
   case 1:
   switch (Zeichen)
   {
   case ' ':
   q = 1;
   break;
   default:
   zeichenTest = false;
   break;
   }
   case 2:
   switch (Zeichen)
   {
   case '+':
   q = 2;
   break;
   case '-':
   q = 2;
   break;
   case '0': case '1': case '2': case '3': case '4':
   case '5': case '6': case '7': case '8': case '9':
   q = 3;
   break;
   default:
   zeichenTest = false;
   break;
   }
   break;
  
   case 3:
   switch (Zeichen)
   {
   case '0': case '1': case '2': case '3': case '4':
   case '5': case '6': case '7': case '8': case '9':
   q = 3;
   break;
   default:
   zeichenTest = false;
   break;
   }
   break;
  
   case 4:
   switch (Zeichen)
   {
   case '0': case '1': case '2': case '3': case '4':
   case '5': case '6': case '7': case '8': case '9':
   q = 3;
   break;
   default:
   zeichenTest = false;
   break;
   }
   break;
  
   default:
   zeichenTest = false;
   }
   }
   return zeichenTest;
   }
}

und nun die Klasse für die main, die DigitAutomat2 verwendet:

import eip.*;

public class IntDigitAutomat
{
static public void main(String[] args)
{
DigitAutomat2 dsa = new DigitAutomat2();

Std.out.print("Eingabe: ");

String inputString = Std.in.readString(); //Datentyp "String" = Zeichenketten

if (dsa.digitCheck2(inputString))
Std.out.println(inputString + " Automat sagt JA! ");
else
Std.out.println(inputString + " Automat sagt NEIN! ");
}
}

Hallo,

ich versuche den oberen Quellcode nachzuvollziehen und ich weiß einfach nicht, was "char Zeichen = inputString.charAt(i); " bedeutet... was genau macht das inputString.charAt(i)???

Lt. Internetquellen gibt charAt(); für eine Zahl eine entsprechendes Zeichen aus (ist das wie aus den ASCII-Tabellen für den Datentyp Char????)... so ergibt charAt(7); die Zahl 7 im Output...

Dann leite ich mir das folgendermaßen für meinen Fall ab:
Ich gebe ein 43, was überprüft werden soll.
Die Schleife geht zwei mal durch genommen. das inputString.charAt(i)? wandelt  also jeweils die 1 und 2 um in entsprechende Zeichen, wozu aber diese Zeichen, wenn man einfach das eingegebene, und zwar inputString später in den cases überprüfen kann?!

2. Frage, wieso verschachtelt man die switch-case-Anweisung überhaupt?!

Hoffe die Aufgabenstellung ist in Ordnung so und der Quelltext trotz schmächtiger Formatierung zu verstehen.

Besten Dank für eure Antworten


        
Bezug
Endl. Automaten: Antwort
Status: (Antwort) fertig Status 
Datum: 17:29 So 10.06.2012
Autor: felixf

Moin!

> Es soll überprüft werden, ob das Eingegebene aus blanks,
> keinem oder einem Vorzeichen '+' bzw. '-' und aus sonst nur
> Ziffern besteht, d.h. als eine formal korrekte ganze Zahl
> zu interpretieren ist i.S.d. endlichen Automaten.
>
> Quellcode dazu:
>  

1:
2: > import eip.*;
3: >  
4: > public class DigitAutomat2
5: >  {
6: >  
7: > public static boolean digitCheck2(String inputString)
8: >     {
9: >   int q = 2; 
10: >  boolean zeichenTest = true;
11: >   for (int i = 0; i < inputString.length(); i++) 
12: >  { 
13: >  char Zeichen = inputString.charAt(i); 
14: >  switch (q)
15: >   {
16: >   case 1:
17: >   switch (Zeichen)
18: >   {
19: >   case ' ':
20: >   q = 1;
21: >   break;
22: >   default:
23: >   zeichenTest = false;
24: >   break;
25: >   }
26: >   case 2:
27: >   switch (Zeichen)
28: >   {
29: >   case '+':
30: >   q = 2;
31: >   break;
32: >   case '-':
33: >   q = 2;
34: >   break;
35: >   case '0': case '1': case '2': case '3': case '4': 
36: >  case '5': case '6': case '7': case '8': case '9':
37: >   q = 3;
38: >   break;
39: >   default:
40: >   zeichenTest = false;
41: >   break;
42: >   }
43: >   break;
44: >  
45: >  case 3:
46: >   switch (Zeichen)
47: >   {
48: >   case '0': case '1': case '2': case '3': case '4': 
49: >  case '5': case '6': case '7': case '8': case '9':
50: >   q = 3;
51: >   break;
52: >   default:
53: >   zeichenTest = false;
54: >   break;
55: >   }
56: >   break;
57: >  
58: >  case 4:
59: >   switch (Zeichen)
60: >   {
61: >   case '0': case '1': case '2': case '3': case '4': 
62: >  case '5': case '6': case '7': case '8': case '9':
63: >   q = 3;
64: >   break;
65: >      default:
66: >      zeichenTest = false;
67: >      break;
68: >   }
69: >   break;
70: >  
71: >  default:
72: >   zeichenTest = false;
73: >   }
74: >   }
75: >   return zeichenTest;
76: >     }
77: >  }
78: >  
79: > und nun die Klasse für die main, die DigitAutomat2 
80: > verwendet:
81: >  
82: > import eip.*;
83: >  
84: > public class IntDigitAutomat 
85: > {
86: >   static public void main(String[] args) 
87: >  {
88: >   DigitAutomat2 dsa = new DigitAutomat2();
89: >  
90: >  Std.out.print("Eingabe: ");
91: >  
92: >  String inputString = Std.in.readString(); //Datentyp 
93: > "String" = Zeichenketten
94: >  
95: >  if (dsa.digitCheck2(inputString))
96: >   Std.out.println(inputString + " Automat sagt JA! ");
97: >   else
98: >   Std.out.println(inputString + " Automat sagt NEIN! ");
99: >   }
100: >  }

>
> ich versuche den oberen Quellcode nachzuvollziehen und ich
> weiß einfach nicht, was "char Zeichen =
> inputString.charAt(i); " bedeutet... was genau macht das
> inputString.charAt(i)???
>  
> Lt. Internetquellen gibt charAt(); für eine Zahl eine
> entsprechendes Zeichen aus (ist das wie aus den
> ASCII-Tabellen für den Datentyp Char????)... so ergibt
> charAt(7); die Zahl 7 im Output...

Der Befehl "char Zeichen = inputString.charAt(i);" erzeugt eine Variable Zeichen vom Typ char, welche den Wert von inputString.charAt(i) enthaelt.

Die Methode []charAt(int) der Klasse String (inputString ist eine Variable vom Typ String) liefert das i-te Zeichen des Strings zurueck. Ist etwa inputString = "test", so ist inputString.charAt(0) == 't', inputString.charAt(1) == 'e', usw.

> Dann leite ich mir das folgendermaßen für meinen Fall
> ab:
>  Ich gebe ein 43, was überprüft werden soll.

Damit ist inputString == "43".

Und somit ist inputString.charAt(0) == '4' und inputString.charAt(1) == '3'.

>  Die Schleife geht zwei mal durch genommen. das
> inputString.charAt(i)? wandelt  also jeweils die 1 und 2 um

Was ist 1 und 2 hier?

> in entsprechende Zeichen, wozu aber diese Zeichen, wenn man
> einfach das eingegebene, und zwar inputString später in
> den cases überprüfen kann?!

Ich verstehe nicht was du meinst.

> 2. Frage, wieso verschachtelt man die switch-case-Anweisung
> überhaupt?!

Es geht hier doch darum, einen endlichen Automaten zu simulieren. Die Variable $q$ sagt, in welchem Zustand der Automat gerade ist. Je nach Zustand soll das aktuelle Zeichen verschieden interpretiert werden. Die aeussere switch-Anweisung entscheidet, welcher Zustand der aktuelle ist, und die innere jeweils, welches das aktuelle Zeichen ist (und was dann passieren soll).

LG Felix


Bezug
                
Bezug
Endl. Automaten: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 18:21 So 10.06.2012
Autor: egal

perfekt erklärt Felix, danke schön und schönes Wochenende ;-)

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Softwaretechnik und Programmierung"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorhilfe.de