【发布时间】:2013-12-05 09:49:37
【问题描述】:
我正在尝试检查表达式在括号方面是否平衡,我的程序应输出适当的消息,如下所示:(我正在从文件中读取表达式)
如果每个“)”都有一个“(”,那么它是平衡的。 如果有 ")" 而没有 "(" 则左括号丢失,依此类推。
我为“(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;
}
【问题讨论】:
-
用调试器单步执行这个告诉你什么?
-
@RossDrew - 请考虑取消删除您的答案。当然,它并不完美,但应该很容易修复。
-
调试器是你的朋友,但是......你会看到你会重复检查它的特性。第一个“)”将打印“balanced”,第二个将打印“left missing”。在最后做这个检查。在循环中,您只需要计算它们(+1 表示“(”,-1 表示“)”)。 此计数的结果必须为零,并且在循环期间它不能为
-
@DavidWallace 我的扳机手指太快了。它甚至没有回答问题,就被chrylis击中了它的头。
-
@DavidWallace 在调试过程中发现,当 st=")" 我弹出该值并检查堆栈是否为空两次......所以导致打印“平衡”然后“遗漏”所以我正在努力解决这个问题并再次检查我的代码