我的代码曾经是:
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/