Я создал программу, которая имеет дело с просьбой пользователя ввести уравнение, например {x + (y - 2) * 1} + [a + b], и проверкой, закрываются ли все скобки и скобки et c. Если мой метод обнаружит, что он закрывается, он напечатает: Выражение: {x + (y - 2) * 1} + [a + b] -> сбалансировано. Моя проблема в том, что мой метод, по-видимому, каждый раз по умолчанию не сбалансирован, поэтому я подозреваю, что это проблема в методе isBalanced. Может кто-нибудь просто дать мне знать, если мой синтаксис неправильный? Кажется, все хорошо, когда я читаю. Вот мой код:
import java.util.*;
import java.io.*;
public class BalancedParanthesis {
static String expressions[];
static class MyArrayStack{
int top = -1;
char brackets[] = new char[100];
void push(char x) {
if(top ==99) {
System.out.print("Stack full");
}
else {
brackets[++top] = x;
}
}
char pop() {
if(top ==-1) {
System.out.println("ERROR:Stack undeflow error");
return '\0';
}
else {
char element = brackets[top];
top--;
return element;
}
}
boolean isEmpty() {
return(top==-1)?true:false;
}
}
static boolean isMatchingPair(char bracketOne,char bracketTwo) {
if(bracketOne=='('&& bracketTwo ==')') {
return true;
}
else if(bracketOne == '{'&& bracketTwo == '}') {
return true;
}
else if(bracketOne == '['&& bracketTwo ==']') {
return true;
}
else {
return false;
}
}
static boolean isBalanced(String expression) {
MyArrayStack st =new MyArrayStack();
for(int index = 0; index<expression.length();index++) {
if(expression.charAt(index)=='{'|| expression.charAt(index)=='(' || expression.charAt(index)=='{') {
st.push(expression.charAt(index));
}
if(expression.charAt(index)=='}'|| expression.charAt(index)==')'||expression.charAt(index)=='}'){
if(st.isEmpty()) {
return false;
}
}
else if(!isMatchingPair(st.pop(),expression.charAt(index))) {
return false;
}
}
if(st.isEmpty()) {
return true;
}
else {
return false;
}
}
public static void main(String[] args) {
System.out.println("Input: ");
Scanner input = new Scanner(System.in);
String x = input.next();
if(isBalanced(x)) {
System.out.println("\n Expression: " + x + " is balanced");
}
else {
System.out.println("\n Expression: " + x + " is not balanced");
}
}
}