我有几个独立的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)
对于一般解决方案,您可以使用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都可以通过几次击键为您完成此操作.
您可以通过使用将提前返回并跳过其余部分的多个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)
如果执行第一个if()条件,则可以返回该值.
不就是这样吗?
if(fruit.weight > 2){
return false; // etc.
}
Run Code Online (Sandbox Code Playgroud)
或者我误解了你的问题?
测试将在第一次未经验证时停止.
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)
| 归档时间: |
|
| 查看次数: |
8575 次 |
| 最近记录: |