Hallo Leute,
anbei die Aufgabenstellung:
Schreiben Sie mit Hilfe eines Stacks ein Programm, das einen Ausdruck auf korrekte Klammerung testet; dabei sollen die Klammern ()[]{} berücksichtigt werden.
Das Programm habe ich schon aber er gibt die falsche Ausgabe aus:
Es werden, glaube ich die richtigen Klammern irgendwie auf ungleichheit geprüft.
AUSGABE:
Dateiende
Bin mit meinem (Java-)Latein am Ende!!!
Bitte um Unterstützung.
MfG
cris
anbei die Aufgabenstellung:
Schreiben Sie mit Hilfe eines Stacks ein Programm, das einen Ausdruck auf korrekte Klammerung testet; dabei sollen die Klammern ()[]{} berücksichtigt werden.
Das Programm habe ich schon aber er gibt die falsche Ausgabe aus:
Es werden, glaube ich die richtigen Klammern irgendwie auf ungleichheit geprüft.
Java:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Part2 {
public static void main(String[] args) {
Stack <Character> stack = new Stack<Character>(50); //Erstelle Feld mit 50 Eintträgen(Character)
File file = new File( //Erstelle neue File Datei
"C:\\Users\\...\\Person.java");
FileReader reader = null; //Setze die Filereader Datei auf null
try {
reader = new FileReader(file); //Datei übergeben
} catch (FileNotFoundException e) {
e.printStackTrace();
}
int ende = 0;
int reihe = 1;
char sign;
char vergleicheSign = 1;
for (;;) { //Endlosschleife
try {
ende = reader.read(); //Datei einlesen
if (ende == -1) {
System.out.println("Dateiende");
break;
}
sign = (char) ende; //Umwandlung in Char
switch (sign) {
case ('['):
stack.push(sign); // Klammer wird in Stack eingefügt
break;
case ('('):
stack.push(sign); // Klammer wird in Stack eingefügt
break;
case ('{'):
stack.push(sign); // Klammer wird in Stack eingefügt
break;
case (']'):
if (stack.isEmpty()) { //Wenn Stack leer ist, spring zur Methode keinPaar
keinPaar(reihe, sign);
} else {
vergleicheSign = stack.pop(); // löscht das oberste Element
if (vergleicheSign != '{') { // Wenn keine schließende Klammer, spring zur Methode fehlerInKlammer
fehlerInKlammer(reihe, sign, vergleicheSign);
}
}
break;
case (')'):
if (stack.isEmpty()) { //Wenn Stack leer ist, Methode keinPaar
keinPaar(reihe, sign);
} else {
vergleicheSign = stack.pop(); //VergleicheSign bzw. pop die Klammer nicht enthält, Methode fehlerInKlammer
if (vergleicheSign != '(') {
fehlerInKlammer(reihe, sign, vergleicheSign);
}
}
break;
case ('}'):
if (stack.isEmpty()) { //Wenn Stack leer ist, Methode keinPaar
keinPaar(reihe, sign);
} else {
vergleicheSign = stack.pop(); //VergleicheSign bzw. pop die Klammer nicht enthält, Methode fehlerInKlammer
if (vergleicheSign != '[') {
fehlerInKlammer(reihe, sign, vergleicheSign);
}
}
break;
case ('\n'): //Zeile wird hochgezählt
reihe++;
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
if (stack.isFull()) { //Wenn Stack voll
System.out.println("Stack voll");
}
if (!stack.isEmpty()) { //Wenn Stack nicht leer ist
for (;;) {
if (stack.isEmpty()) { //Wenn Stack leer ist, Abbrechen
break;
}
vergleicheSign = stack.pop(); //vergleicheSign erhält den Wert von pop
switch (vergleicheSign) { //
case '[':
schließendeKlammer(']');
break;
case '(':
schließendeKlammer(')');
break;
case '{':
schließendeKlammer('}');
break;
}
}
}
}
public static void keinPaar(int reihe, char sign) {
System.out.println("Zu der Klammer " + sign + " in der Zeile " + reihe
+ " fehlt die dazu passende Klammer.\n");
}
public static void fehlerInKlammer(int reihe, char sign, char vergleicheSign) {
System.out.println("In der Zeile " + reihe + " passen die Klammern "
+ vergleicheSign + " " + sign + " nicht zusammen.\n");
}
public static void schließendeKlammer(char klammer) {
System.out.println("Die schließende Klammer " + klammer + " fehlt");
}
}
AUSGABE:
Code:
In der Zeile 11 passen die Klammern [ ] nicht zusammen.
In der Zeile 16 passen die Klammern { } nicht zusammen.
In der Zeile 19 passen die Klammern { } nicht zusammen.
In der Zeile 22 passen die Klammern { } nicht zusammen.
In der Zeile 25 passen die Klammern { } nicht zusammen.
In der Zeile 28 passen die Klammern { } nicht zusammen.
In der Zeile 31 passen die Klammern { } nicht zusammen.
In der Zeile 34 passen die Klammern { } nicht zusammen.
In der Zeile 37 passen die Klammern { } nicht zusammen.
In der Zeile 42 passen die Klammern { } nicht zusammen.
In der Zeile 44 passen die Klammern { } nicht zusammen.
Dateiende
Bin mit meinem (Java-)Latein am Ende!!!
Bitte um Unterstützung.
MfG
cris
Zuletzt bearbeitet von einem Moderator: