我有以下代码来显示某个字符串,根据在我的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 3
说condition always false
时收到警告。
答案 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
为真,那么您永远不会检查whippedCream
和chocolate
是否都为真,因为else if
的条件仅在前面所有条件都满足的情况下才会被评估假的。
答案 1 :(得分:0)
让我们考虑一下代码
}else if(whippedCream || chocolate){
if (whippedCream){
return "whippedcream";
}else if (chocolate){
return "chocolate";
}
如果if (whippedCream)
或whippedCream
为chocolate
,我们只会检查true
。因此,当我们到达else if (chocolate)
时,我们知道whippedCream
是false
,或者我们不在第二个else
。我们也知道chocolate
是真的,或者我们不会在这个区块中。
答案 2 :(得分:0)
该消息是因为您嵌套ifs的方式。您只有在其中一个为真时才输入if (whippedCream || chocolate)
。然后,当一个简单的其他就足够时,你可以单独检查每一个。
答案 3 :(得分:0)
这是合乎逻辑的现象:
如果此条件为真:if(whippedCream || chocolate)
这意味着其中一个whippedCream
或chocolate
为true
或两者都有。
因此,if (whippedCream) else if(chocolate)
内部有if
,这意味着else if
中的第二个true
是不必要的。因为其中一个是(whippedCream)
,所以如果false
是else
,则true
表示巧克力是if(chocolate)
,条件replace
是不必要的。