Java 布尔返回false,我不知道为什么
我在写一个程序,看看给定的一行中是否有平衡的括号,每个括号都有一个开括号和一个闭括号 我要做的是创建三个堆栈,每种类型的括号一个,每个打开的括号添加到堆栈中,每个关闭的括号,打开的括号从堆栈中弹出。如果堆栈是空的,并且有一个右括号,那么它是不平衡的,因此它应该返回false。然而,由于某些原因,即使在线路平衡的情况下,我也不知道为什么会变得不平衡 我们必须使用给定的字符堆栈类,因此下面是给定字符堆栈类中的空方法:Java 布尔返回false,我不知道为什么,java,Java,我在写一个程序,看看给定的一行中是否有平衡的括号,每个括号都有一个开括号和一个闭括号 我要做的是创建三个堆栈,每种类型的括号一个,每个打开的括号添加到堆栈中,每个关闭的括号,打开的括号从堆栈中弹出。如果堆栈是空的,并且有一个右括号,那么它是不平衡的,因此它应该返回false。然而,由于某些原因,即使在线路平衡的情况下,我也不知道为什么会变得不平衡 我们必须使用给定的字符堆栈类,因此下面是给定字符堆栈类中的空方法: /** * Returns true if the stack is empty
/**
* Returns true if the stack is empty, otherwise it returns false.
*/
public boolean empty ( )
{
if (size == 0 )
return true;
else
return false;
}
这是我的班级应该做的平衡:
/**
* for every open bracket, add to new stack
* if close bracket pop off one open bracket
* if stack is empty when trying to pop off a bracket then it is not balanced
* if stack is empty at the end of method, it is balanced.
*
* @param String x
* @return true or false, whether the string inputed is balanced or not
*/
public boolean isBalanced(String x){
StackOfCharacters parenstack = new StackOfCharacters();
StackOfCharacters brackstack = new StackOfCharacters();
StackOfCharacters curlstack = new StackOfCharacters();
boolean paren = parenstack.empty();
boolean brack = brackstack.empty();
boolean curl = curlstack.empty();
for (int i = 0; i < x.length(); i++){
if (x.charAt(i) == '('){
parenstack.push('(');
}
if (x.charAt(i) == '{'){
curlstack.push('{');
}
if (x.charAt(i) == '['){
brackstack.push('[');
}
if (x.charAt(i) == ')'){
if (paren = true)
return false;
else if (paren = false)
parenstack.pop();
}
if (x.charAt(i) == '}'){
if (curl = true)
return false;
else if (curl = false)
curlstack.pop();
}
if (x.charAt(i) == ']'){
if (brack = true)
return false;
else if (curl = false)
brackstack.pop();
}
}
if ( paren = true && brack != false && curl != false)
return true;
else
return false;
}
如果我在main中的字符串输入中输入类似的内容,则显示为不平衡。此代码有两个问题可能会导致错误: 布尔变量更新不足 不正确的equals==语法 1-在循环的每次迭代中,您都不会更新父堆栈是true还是false。在循环开始时将paren初始化为false之后,该值在整个迭代过程中不会改变,因此在条件中
if (x.charAt(i) == ')'){
if (paren = true)
return false;
else if (paren = false)
parenstack.pop();
}
if (x.charAt(i) == '}'){
if (curl = true)
return false;
else if (curl = false)
curlstack.pop();
}
if (x.charAt(i) == ']'){
if (brack = true)
return false;
else if (curl = false)
brackstack.pop();
}
brack、curl和paren将为false,因此不会显示预期结果
2-单个等号=不检查是否相等;他们是赋值操作符。您需要==来检查布尔条件 将值赋回布尔值,而不是在if语句中计算它们的状态 =用于分配,==用于评估 当代码到达其中一条语句时,它将为值赋值为true,然后将该值求值为true,然后返回false 相反,您应该简单地使用if-paren 这引发了下一个问题,这些变量永远不会更新,并且在方法的整个执行过程中都将保持为false,相反,您应该直接评估isEmpty方法的结果
if (parenstack.empty()) {
return false;
首先,这也不能正常工作。以这个为例:{}。那里发生了什么事?堆栈不是共享的,因此它实际上无法确定分组符号是否位于有效位置。如果这不重要,那么您可以使用一个整数来保持每个类型中有多少是打开的
int paren = 0;
int curly = 0;
int brack = 0;
for (int i = 0; i < x.length(); i++)
{
if (x.charAt(i) == '(') paren++;
if (x.charAt(i) == ')') paren--;
if (x.charAt(i) == '{') curly++;
if (x.charAt(i) == '}') curly--;
if (x.charAt(i) == '[') brack++;
if (x.charAt(i) == ']') brack--;
}
if (paren == 0 && curly == 0 && brack == 0) return true;
else return false;
如果我上面指出的错误不重要,那么就不需要堆积如山的东西。本周我们将得到多少括号平衡问题的精确副本?每人一个就够了,谢谢。这个问题是关于布尔人的,虽然我一直在和布尔人打交道,但无法让他们返回正确的答案。在你使用=,你应该使用=测试相等性,=为变量赋值。啊哈!我知道了,非常感谢!您是对的,这将更容易,但我们被告知要专门使用给定字符堆栈类中的堆栈
int paren = 0;
int curly = 0;
int brack = 0;
for (int i = 0; i < x.length(); i++)
{
if (x.charAt(i) == '(') paren++;
if (x.charAt(i) == ')') paren--;
if (x.charAt(i) == '{') curly++;
if (x.charAt(i) == '}') curly--;
if (x.charAt(i) == '[') brack++;
if (x.charAt(i) == ']') brack--;
}
if (paren == 0 && curly == 0 && brack == 0) return true;
else return false;