如果标志为false,则跳过条件

Jay*_*ayy 4 java

我有几个独立的if条件,在每个条件下,我将评估一个布尔变量值为true或false.

如果布尔变量值在第一个if条件中变为false,那么我如何跳过所有条件的其余部分.

private static boolean isRecommended(Fruit fruit) {
    boolean isRecommended = true;

    if(fruit.weight > 2){
        isRecommended = false;
    }
    if(!"red".equals(fruit.color)){
        isRecommended = false;
    }
    if(!"sweet".equals(fruit.taste)){
        isRecommended = false;
    }
    if(!fruit.isPerishable){
        isRecommended = false;
    }

    return isRecommended;
}
Run Code Online (Sandbox Code Playgroud)

如果执行第一个if()条件,则可以返回该值.我知道在循环中我们可以使用continue关键字来跳过循环执行的其余部分.我们怎样才能在这里实现类似的东西

更新:

我并不完全意味着在第一个if()条件下,如果任何if()条件被执行,那么什么是跳过其余条件的最佳方式,如continue在循环中执行

Ami*_*nde 28

return fruit.weight <= 2 
    && "red".equals(fruit.color) 
    && "sweet".equals(fruit.taste)
    && fruit.isPerishable;
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 9

对于一般解决方案,您可以使用else if:

if(fruit.weight > 2){
    isRecommended = false;
}
else if(!"red".equals(fruit.color)){
   //etc...
}
Run Code Online (Sandbox Code Playgroud)

但在您的具体示例中,您可以使用布尔逻辑:

return !(
   fruit.weight > 2 ||
   !"red".equals(fruit.color) ||
   !"sweet".equals(fruit.taste) ||
   !fruit.isPerishable
);
Run Code Online (Sandbox Code Playgroud)

您可以使用IDE通过应用De Morgan定律来重构此表达式的逻辑.大多数不错的IDE都可以通过几次击键为您完成此操作.


Rob*_*son 8

您可以通过使用将提前返回并跳过其余部分的多个return语句来压缩它.为了更加简洁,我还删除了不需要的花括号.

private static boolean isRecommended(Fruit fruit) {
    if(fruit.weight > 2)
        return false;
    if(!"red".equals(fruit.color))
        return false;
    if(!"sweet".equals(fruit.taste))
        return false;
    if(!fruit.isPerishable)
        return false;
    return true;
}
Run Code Online (Sandbox Code Playgroud)

  • 我不是一个删除"不需要的"花括号的忠实粉丝.如果将来有人决定在其中一个返回之前添加一个语句(例如:日志)会怎么样?不会产生语法错误(虽然它可能会抱怨死代码),现在你手上有一团糟. (8认同)

Jon*_*ker 6

如果执行第一个if()条件,则可以返回该值.

不就是这样吗?

if(fruit.weight > 2){
    return false; // etc.
}
Run Code Online (Sandbox Code Playgroud)

或者我误解了你的问题?


Den*_*ret 5

测试将在第一次未经验证时停止.

private static boolean isRecommended(Fruit fruit) {
    return 
            fruit.weight <= 2
            && "red".equals(fruit.color)
            && "sweet".equals(fruit.taste)
            && fruit.isPerishable
    ;
}
Run Code Online (Sandbox Code Playgroud)