我有一个方法,它应该验证在使用java的字符串中准确打开和关闭括号。这个方法将被用来解析数学表达式,所以对括号进行平衡很重要。出于某种原因,它在这两个运行的返回false:无法正确验证java方法中的平衡括号解析
System.out.println(parChecker("(()")); // returns false :-)
System.out.println(parChecker("((()))")); // returns false :-( WHY??
下面是一个使用栈来解决问题的方法。有些事情是错误的,因为它也是一个平衡的括号。有什么问题?先谢谢你。
public static boolean parChecker(String str) {
String[] tokens = str.split("");
int size = tokens.length;
Stack theStack = new Stack(size);
int index = 0;
boolean balanced = true;
while ((index < size) && balanced) {
String symbol = tokens[index];
if (symbol.equals("(")) {
theStack.push(symbol);
} else {
if (theStack.isEmpty()) {
balanced = false;
} else {
theStack.pop();
}
}
index++;
}
if (balanced && theStack.isEmpty()) {
return true;
} else {
return false;
}
}
下面是我用我的Stack类:
public class Stack {
private Object [] stack;
private int maxSize = 0;
private int top;
public Stack(int size){
maxSize = size;
stack = new Object[maxSize];
top = -1;
}
public void push(Object obj){
top++;
stack[top] = obj;
}
public Object pop(){
return stack[top--];
}
public Object peek(){
return stack[top];
}
public boolean isEmpty(){
return (top == -1);
}
public boolean isFull(){
return (top == maxSize -1);
}
}
为什么不要只用调试它? – manouti
如果您确实想要解析算术表达式,请创建一个语法。根据语法,创建一个解析器,它将为您提供一个抽象语法树。您可能想了解一些基本的编译器技术。如果你一直这样做,你的代码会变得混乱,我保证它。 – Turing85
我的目标是学习使用堆栈数据结构。这是它的一个用处。否则,我不关心解析器。让我们回到这个问题。任何想法为什么它返回一个错误? – Doublespeed