如果 - 否则如果条件检查BUG

时间:2018-05-22 14:44:33

标签: java android

假设我们有两个变量

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();
}

这种行为是故意的还是只是一个坏的错误?如果这是一个错误,您可以将谷歌发送到错误报告,因为我不知道如何。

3 个答案:

答案 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语句