Java - 条件始终为True / False(Android复选框)

时间:2018-03-16 18:03:01

标签: java android if-statement checkbox conditional-statements

我有以下代码来显示某个字符串,根据在我的Android应用中选中的复选框:

public String createOrderSummary(){

    CheckBox whippedCheckBox = findViewById(R.id.whipped);
    boolean whippedCream = whippedCheckBox.isChecked();

    CheckBox chocoBox = findViewById(R.id.chocolate);
    boolean chocolate = chocoBox.isChecked();

    if (whippedCream && chocolate){
        return "both selected";
    }else if(whippedCream || chocolate){
        if (whippedCream){
            return "whippedcream";
        }else if (chocolate){
            return "chocolate";
        }
    }else{
        return "none checked";
    }
    return "";
}

我在line 14收到警告condition chocolate is always true,为什么会这样?

当我将线路切换为:

 if (whippedCream){
        return "whipped cream";
    }else if(whippedCream && chocolate){
        return "both selected";
    }else{
        return "none selected";
    }

我在line 3condition always false时收到警告。

4 个答案:

答案 0 :(得分:2)

让我们考虑你的一部分:

if (whippedCream || chocolate) { // either whippedCream is true or chocolate is true
    if (whippedCream) { // whippedCream is true
        return "whippedcream";
    } else if (chocolate) { // whippedCream is not true, so chocolate must be true
        return "chocolate";
    }
}

因此可以简化这种情况:

if (whippedCream || chocolate) { // either whippedCream  is true or chocolate is true
    if (whippedCream) { // whippedCream is true
        return "whippedcream";
    } else { // chocolate must be true
        return "chocolate";
    }
}

当然,通过消除内在条件可以进一步简化完整条件:

if (whippedCream && chocolate) { // both true
    return "both selected";
} else if (whippedCream) { // only whippedCream is true
    return "whippedcream";
} else if (chocolate) { // only chocolate is true
    return "chocolate";
} else {
    return "none checked";
}

您的替代条件:

if (whippedCream){
    return "whipped cream";
}else if(whippedCream && chocolate){
    return "both selected";
}else{
    return "none selected";
}

完全错了。如果whippedCream为真,那么您永远不会检查whippedCreamchocolate是否都为真,因为else if的条件仅在前面所有条件都满足的情况下才会被评估假的。

答案 1 :(得分:0)

让我们考虑一下代码

}else if(whippedCream || chocolate){
    if (whippedCream){
        return "whippedcream";
    }else if (chocolate){
        return "chocolate";
    }

如果if (whippedCream)whippedCreamchocolate,我们只会检查true。因此,当我们到达else if (chocolate)时,我们知道whippedCreamfalse,或者我们不在第二个else。我们也知道chocolate是真的,或者我们不会在这个区块中。

答案 2 :(得分:0)

该消息是因为您嵌套ifs的方式。您只有在其中一个为真时才输入if (whippedCream || chocolate)。然后,当一个简单的其他就足够时,你可以单独检查每一个。

答案 3 :(得分:0)

这是合乎逻辑的现象:

如果此条件为真:if(whippedCream || chocolate)这意味着其中一个whippedCreamchocolatetrue或两者都有。

因此,if (whippedCream) else if(chocolate)内部有if,这意味着else if中的第二个true是不必要的。因为其中一个是(whippedCream),所以如果falseelse,则true表示巧克力是if(chocolate),条件replace是不必要的。