我正在尝试检查表达式是否在括号中是平衡的,我的程序应该输出相应的消息,如下所示:(我正在从文件中读取表达式)
如果对于每个")"有一个"("那么它是平衡的.如果有一个")"没有"("那么左括号丢失,依此类推.
我为"(A + B)"的情况制定了代码,它打印平衡,但对于"(A + B)"的情况,它打印平衡和左丢失,我似乎无法弄清楚是什么问题是
这里是代码:(编辑:我把它作为一种方法,当表达式平衡时,它工作正常,当右括号丢失时,如果左边的一个缺失它打印出"平衡")问题是当它左括号丢失,返回的堆栈为空,这就是它打印"平衡"的原因.我真的不知道如何解决这个问题!
public static Stack isBalanced(String str) {
Stack s = new Stack();
char temp;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '(') {
s.push(str.charAt(i));
} else if (str.charAt(i) == ')') {
if (!s.isEmpty()) {
temp = (char) s.pop();
}
}
}
return s;
}
Run Code Online (Sandbox Code Playgroud)
这似乎是一个过于复杂的问题解决方法.您可以通过意识到在这种情况下您只匹配一个可能的对来简化这一点,因此简单计数就足够了.
只需扫描字符串检查每个字符.增加每个计数器(在每个计数器递减).
如果计数器低于零,那么你有一个额外的结束括号.如果您完成扫描并且计数器不为零,则您有一个额外的开口支架.