假设我们有两个变量
int number = 0;
int second_number = 1;
如果我们不在if-else中使用括号,如果这样检查。
if(number == 1)
if(second_number == 0)
Toast.makeText(getApplicationContext(), "Haha!", Toast.LENGTH_SHORT).show();
else if(number == 0)
if(second_number == 1)
Toast.makeText(getApplicationContext(), "Hehe!", Tast.LENGTH_SHORT).show();
否则永远不会达到(number == 0)行,这样程序就不能正常运行,甚至没有对此用法的警告!在战斗了2个小时之后,我已经想到了这个bug!
但是,如果您使用这样的括号,则代码可以正常工作。
if(number == 1) {
if(second_number == 0)
Toast.makeText(getApplicationContext(), "Haha!", Toast.LENGTH_SHORT).show();
} else if(number == 0) {
if(second_number == 1)
Toast.makeText(getApplicationContext(), "Hehe!", Tast.LENGTH_SHORT).show();
}
这种行为是故意的还是只是一个坏的错误?如果这是一个错误,您可以将谷歌发送到错误报告,因为我不知道如何。
答案 0 :(得分:4)
根据文档,这称为“悬空其他问题”,它不是普通java行为Documentation的错误。
if (number == 1)
if (second_number == 0)
Toast.makeText(getApplicationContext(), "Haha!", Toast.LENGTH_SHORT).show();
else if(number == 0) // A "dangling else"
要克服这个问题,你可以这样使用,
IfThenStatement:
if ( Expression ) Statement
IfThenElseStatement:
if ( Expression ) StatementNoShortIf else Statement
IfThenElseStatementNoShortIf:
if ( Expression ) StatementNoShortIf else StatementNoShortIf
答案 1 :(得分:1)
如果在IF
中有多个表达式,则必须使用括号if(true)
works;
if(true)
dont;
work;
//work is executed even if the condition doesn't pass, because the IF isn't wrapping it
if(true){
works;
too;
}
编辑:问题是第一个内部的if消耗了else,如果这是python,或任何基于缩进的语言,它应该工作
if(second_number == 0)
Toast.makeText(getApplicationContext(), "Haha!", Toast.LENGTH_SHORT).show();
else if(number == 0)
答案 2 :(得分:0)
您缩进代码的方式并不重要。 else属于紧靠其上方的if。你必须一直使用大括号,特别是如果你有嵌套的if-else语句