Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 布尔返回false,我不知道为什么_Java - Fatal编程技术网

Java 布尔返回false,我不知道为什么

Java 布尔返回false,我不知道为什么,java,Java,我在写一个程序,看看给定的一行中是否有平衡的括号,每个括号都有一个开括号和一个闭括号 我要做的是创建三个堆栈,每种类型的括号一个,每个打开的括号添加到堆栈中,每个关闭的括号,打开的括号从堆栈中弹出。如果堆栈是空的,并且有一个右括号,那么它是不平衡的,因此它应该返回false。然而,由于某些原因,即使在线路平衡的情况下,我也不知道为什么会变得不平衡 我们必须使用给定的字符堆栈类,因此下面是给定字符堆栈类中的空方法: /** * Returns true if the stack is empty

我在写一个程序,看看给定的一行中是否有平衡的括号,每个括号都有一个开括号和一个闭括号

我要做的是创建三个堆栈,每种类型的括号一个,每个打开的括号添加到堆栈中,每个关闭的括号,打开的括号从堆栈中弹出。如果堆栈是空的,并且有一个右括号,那么它是不平衡的,因此它应该返回false。然而,由于某些原因,即使在线路平衡的情况下,我也不知道为什么会变得不平衡

我们必须使用给定的字符堆栈类,因此下面是给定字符堆栈类中的空方法:

/**
 * 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;