Ich habe den ganzen Tag daran gearbeitet, es scheint einen Kompilierungsfehler zu geben. Ich brauche es, um arithmetische Ausdrücke auszugeben: hat passende Symbole, wenn {25 + (3 - 6) * 8} die Ausgabe ist (es tut dies richtig), aber wenn ich eine nicht übereinstimmende eingabe wie} {25 + (3 - 6) I eine Exception in thread "main" java.util.EmptyStackException Fehler erhaltenJava-Matching-Klammer
import java.util.*;
public class Comparison {
public static void main(String[] args) {
Stack<Character> stack = new Stack<>();
System.out.print("Please enter arithmetic expression: For example, the expression {25 + (3 – 6) * 8} ");
Scanner input = new Scanner(System.in);
String capture = input.nextLine();
// String[] pieces = capture.split("\\s+");
for (int i = 0; i < capture.length(); i++) {
char p = capture.charAt(i);
if (p == '{' || p == '(' || p == '[') {
stack.push(p);
}
char r = stack.peek();
if (p == '}' || p == ')' || p == ']')
{
if (p == '}' && r == '{' || p == ')' && r == '(' || p == ']' && r == '['){
stack.pop();
System.out.print("Arithmetic Expression: has matched symbols.");
}
else {
System.out.print("Arithmetic Expression: has mismatched symbols.");
}
}
}
}
}
Die Fehlermeldung macht sehr viel Sinn ... Es ist äquivalent zu einem 'NullPointerExcepion' in dem Sinne, dass nichts auf dem Stapel existiert, aber Sie versuchen, eine Lese-/Pop-Operation darauf auszuführen. Sie können diese Ausnahme "versuchen-fangen" und auf dem "catch" wissen Sie, dass die Eingabe schlecht ist, weil sie keine korrekt eingeschlossenen Klammern enthält. – px06