我有一個方法,它應該驗證在使用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