Hallo zusammen,
ich arbeite grade an einer Aufgabe in der das Programm überprüft, ob eine Folge von Klammern wohlgeformt ist
z.B.:
wohlgeformt: ([()])
nicht wohlgeformt: {(})
bis jetzt habe ich alle offenen Klammer in mein Stack gepusht und wenn ich eine geschlossene Klammer gefunden habe und die die letze offene Klammer im Stack dazu passt, entferne ich die offene Klammer wieder vom Stack.
Doch irgendwie klappt das nicht ganz, heißt er entfernt nicht alle Klammern vom Stack, obwohl es wohlgeformt ist..
finde meinen Fehler nicht, hat jemand einen Ratschlag?
ich arbeite grade an einer Aufgabe in der das Programm überprüft, ob eine Folge von Klammern wohlgeformt ist
z.B.:
wohlgeformt: ([()])
nicht wohlgeformt: {(})
bis jetzt habe ich alle offenen Klammer in mein Stack gepusht und wenn ich eine geschlossene Klammer gefunden habe und die die letze offene Klammer im Stack dazu passt, entferne ich die offene Klammer wieder vom Stack.
Doch irgendwie klappt das nicht ganz, heißt er entfernt nicht alle Klammern vom Stack, obwohl es wohlgeformt ist..
finde meinen Fehler nicht, hat jemand einen Ratschlag?
Code:
public class Aufgabe6 {
public static void main(String[] args) {
Keller t = new Keller();
t.klammerCheck("()[]{}");
System.out.println(t);
}
}
class Keller {
private Object item = "";
private Keller next;
public Keller() {
next = null;
}
public boolean isEmpty() {
return next == null;
}
public void push(Object x) {
Keller l = new Keller();
l.item = x;
l.next = next;
next = l;
}
public void pop() {
next = next.next;
}
public Object top() {
return next.item;
}
public String toString() {
if (isEmpty())
return "";
if (!next.isEmpty())
return "" + next.item + " -> " + next.toString();
return "" + next.item;
}
public void klammerCheck(String klammer) {
for (int i = 0; i <= klammer.length() - 1; i++) {
if (klammer.charAt(i) == '(' || klammer.charAt(i) == '[' || klammer.charAt(i) == '{') {
push(klammer.charAt(i));
}
}
for (int i = 0; i <= klammer.length() - 1; i++) {
switch(klammer.charAt(i)) {
case ')':
if (next.item.equals((char) '(')){
pop();
break;
}
case '}':
if(next.item.equals((char) '{')){
pop();
break;
}
case ']':
if(next.item.equals((char) '[')){
pop();
break;
}
default: continue;
}
}
if (isEmpty()) {
System.out.println("die Klammer ist Wohlgeformt");
} else {
System.out.println("Klammer ist nicht wohlgeformt");
}
}
}