Так что я написал этот код, чтобы определить, является ли выражение уравнял скобку в стеке:Как определить, имеет ли выражение сбалансированные скобки в стеке?
public static boolean isBalanced(String expr) {
StringStack stack = new StringStackRefBased();
try{
for (int i = 0; i<expr.length(); i++){
if (expr.charAt(i) == ('(')){
stack.push("(");
} else if (expr.charAt(i) == (')')){
stack.pop();
}
}
if (stack.isEmpty()){
return true;
} else {
return false;
}
} catch (StringStackException e) {
return false;
}
}
Проблема заключается в том, что стопка держит на возвращении ложных, даже если выражение сбалансированных скобок, что случилось с моим кодом?
Вот код для StringStackRefBased
public class StringStackRefBased implements StringStack {
private StringNode head;
public boolean isEmpty(){
return head == null;
}
public void push(String item) throws StringStackException{
head = new StringNode(item);
}
public String pop() throws StringStackException{
String result = null;
if(isEmpty()){
throw new StringStackException("Empty Stack");
}
head.next = head;
return head.toString();
}
public String peek() throws StringStackException{
if (isEmpty()){
throw new StringStackException("Stack underflow");
}
return head.toString();
}
}
Ну StringStack не так уж много в нем, но StringStackRefBased имеет все методы в нем. Я обновил код, чтобы показать StringStackRefBased. Самое большое, что мне интересно, это правильные методы push и pop? –
Почему бы просто не иметь int и делать 'count ++' и 'count -'? Затем в конце вы можете проверить, равно ли счету. – Bubletan
Проблема заключается в вашем 'StringStack', потому что, если я заменил его на встроенный' Stack' Java, он будет работать отлично. –