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: 
			
		
	
								
								
									
	
								
							
							 
				 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		