所以我假设要接受用户输入的.java文件并检查文件的括号,括号和花括号是否平衡。输出"平衡'如果不是"不平衡'我已经写出所有代码,但我的stackBalance方法没有正确检查。我告诉它正在回归"余额"任何比赛后输出。循环应该继续,直到没有要解析的内容并且堆栈不为空。基本上我的计划是决定"平衡"太快(在检查整个堆栈之前)。但我只是没有看到我搞砸了。快速修复将不胜感激!这是代码:
public static String stackBalance(Scanner in){
if(!in.hasNext()){
System.out.println("Nothing to see");
}
else{
stack<Character> stack = new stack<Character>();
Boolean istrue = true;
String expr = in.next();
for (int i = 0; i < expr.length(); i++)
{
char c = expr.charAt(i);
if (c == '[' || c == '(' || c == '{')
{
stack.push(c);
}
if (c == '}' || c == ')' || c == ']')
{
if (stack.isEmpty())
istrue = false;
char last = stack.peek();
if (c == '}' && last == '{' || c == ')' && last == '(' || c == ']' && last == '[')
stack.pop();
else
istrue = false;
}
}
if (istrue)
{
System.out.println("File is balanced");
}
else
System.out.println("File is not balanced");
}
return null;
}
}
答案 0 :(得分:0)
你的程序没有太快决定,当一切都结束时 没有正确决定。
要了解正在发生的事情,请考虑以下表达式:
((x+y)
即使括号明显不平衡,您的程序也会返回true
。这是因为平衡条件需要包括检查堆栈是否已清空:
if (istrue && stack.isEmpty()) {
... // ^^^^^^^^^^^^^^^^^^
} else {
...
}