java - 嵌套 if、else if,不带括号

标签 java

我的代码曾经是:

for(int i=1; i<par.length(); i++)
    {
        if( '}'==(par.charAt(i)) )
            if(parStack.pop()!='{')
                return false;

        else if( ')'==(par.charAt(i)) )
                if(parStack.pop()!='(')
                    return false;

        else if( ']'==(par.charAt(i)) )
                if(parStack.pop()!='[')
                    return false;

        else if ( '{'==(par.charAt(i)) || '['==(par.charAt(i)) || '('==(par.charAt(i)))
                parStack.push(par.charAt(i));
    }

不幸的是,它无法正常工作。由于错误的性质(仅适用于 {} 括号开始/结束),我意识到 else 是多余的(因为该方法无论如何都会返回 false),所以我删除了它,代码如下所示:

for(int i=1; i<par.length(); i++)
    {
        if( '}'==(par.charAt(i)) )
            if(parStack.pop()!='{')
                return false;

        if( ')'==(par.charAt(i)) )
                if(parStack.pop()!='(')
                    return false;

        if( ']'==(par.charAt(i)) )
                if(parStack.pop()!='[')
                    return false;

        if ( '{'==(par.charAt(i)) || '['==(par.charAt(i)) || '('==(par.charAt(i)))
                parStack.push(par.charAt(i));
    }

代码然后工作得很好。我想知道为什么会导致这个错误?我认为上面的代码不需要括号,因为它都是单个语句。

最佳答案

仅仅因为您以这种方式缩进代码,它就不会按您的预期工作(这不是 Python)。

事实上,这些行

if( '}'==(par.charAt(i)) )
    if(parStack.pop()!='{')
        return false;

else if( ')'==(par.charAt(i)) )
        if(parStack.pop()!='(')
            return false;
...

相当于:

if( '}'==(par.charAt(i)) )
    if(parStack.pop()!='{')
        return false;
    else if( ')'==(par.charAt(i)) )
        if(parStack.pop()!='(')
            return false;
...

这不是你想要的。

如何避免这种情况?您可以使用具有自动包围功能的 IDE,例如 Eclipse。或者自己使用括号:

if ('}' == (par.charAt(i))) {
    if (parStack.pop() != '{') {
        return false;
    }
} else if (')' == (par.charAt(i))) {
    if (parStack.pop() != '(') {
        return false;
    }
} ...

关于java - 嵌套 if、else if,不带括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25008599/

相关文章:

java - 谷歌应用程序引擎java错误使用blobstore api从云存储检索文件

java - HTC Sensation 上的 NPE,在模拟器中工作

java - 同一事务中的多个资源提供者 Spring

java - 如何使用 Jackson 迭代 JSON 对象?

java - Applet 类名 - ClassNotFoundException

javascript - 如何从 JavaScript 中的 ASCII 字符生成随机字符串

Java - 使用 PPQ 节拍进行计时的自定义 MIDI 音序器的可听滞后

java - 将 JSON 响应与动态键绑定(bind)到 Java 对象

java - 无法从外部证书创建 SSLContext

java - 使用键盘滚动弹出列表时如何使 JComboBox 所选项目不更改