【发布时间】:2016-06-26 09:45:36
【问题描述】:
我写了一个java代码来测试一个表达式是否平衡,即这个程序检查字符'(','{'和'['是否有相应的分隔符。但是我无法得到所需的答案。出了点问题,我无法弄清楚,因此需要您的帮助。这是代码。
package z_Stack_InfixToPostfix;
import java.util.Stack;
public class Driver_InfixToPostfix {
public static void main(String[] args) {
String s="(a+b)";
System.out.println(checkBalance(s));
}
public static boolean checkBalance(String expression){
boolean isBalanced=true;
Stack<Character> myStack=new Stack<Character>();
int length=expression.length();
int i=0;
while(isBalanced && i<length){
switch(expression.charAt(i)){
case '(': case '{': case '[' :
myStack.push(expression.charAt(i));
break;
case ')': case '}': case ']':
if(myStack.isEmpty()){
isBalanced=false;
}
else{
char opendelimiter=myStack.pop();
if(opendelimiter!=expression.charAt(i)){
isBalanced=false;
}
}
break;
}
i++;
}
if(!myStack.isEmpty()){
isBalanced=false;
}
return isBalanced;
}
}
【问题讨论】:
-
There is something wrong- 你能给出一个输出不是你期望的示例输入吗? -
我在 main 方法中给出了一个示例输入。是(a+b)。它应该是平衡的,我的 checkBalance 方法应该返回 true,但我一直在得到 false。
-
您希望
([}]得到什么答案? -
@shmosel 是假的吧?它将'('和'['添加到堆栈中,当它遇到'}'时,它将进入我的switch语句中的第二组案例,因为'['和'{'不相等,isBalanced将是设置为 false 并退出循环对吗?
-
@rohitkrishna094,其实不然。您的代码没有区分任何类别的分隔符。尽管正如一些答案所解释的那样,这也许是
if(opendelimiter!=expression.charAt(i))的意图。
标签: java stack expression parentheses balance