我正在尝试检查表达式在括号方面是否平衡,我的程序应该输出适当的消息,如下所示:(我正在从文件中读取表达式)
如果每个“)”都有一个“(”,那么它是平衡的。 如果有“)”而没有“(”,则缺少左括号,依此类推。
我计算出了“(A+B)”情况下的代码,它打印出平衡,但对于“(A+B))”情况,它打印出平衡和左缺失,我似乎无法找出问题所在
这是代码: (编辑:我把它作为一种方法来解决,当表达式平衡并且缺少右括号时,它工作得很好,但如果缺少左括号,它会打印出“平衡”)问题是当它缺少左括号时括号,返回的堆栈是空的,所以这就是它打印“balanced”的原因。我真的不知道如何解决这个问题!
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;
}
最佳答案
这似乎是解决问题的过于复杂的方法。您只需意识到在这种情况下您只匹配一对可能的对,因此简单的计数就足够了,从而可以大大简化这一过程。
只需扫描字符串并检查每个字符即可。在每个 ( ) 处增加一个计数器,在每个 ) 处减少一个计数器。
如果计数器低于零,那么您就有一个额外的右括号。如果您完成扫描并且计数器不为零,那么您就有一个额外的左括号。
关于java - 检查表达式在括号方面是否平衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20396588/