java同时满足语句_关于java:一旦条件满足就跳过if语句

这个问题来自我的强迫症性质。 说我有这段代码。

boolean executed = false;

for(Object o : Collection){

if((o fulfills condition) && executed  == false){

//do something

executed  = true;

}

//other code

}

如果规范仅要求if语句执行一次,是否有比将executed设置为true更好的方法来跳过检查if条件? 令我困扰的是,在if语句已经执行之后,循环需要在每个循环中检查if条件。

执行布尔值的目的是防止if语句再次执行。 我不确定这是否可行,但是我想更进一步,并跳过一旦executed为true是否有条件的检查。

编辑:满足条件后,我仍然需要完成循环。

executed变为true后会发生什么?

什么是" continue"关键字的重复,它在Java中如何工作?

您是否要对所有元素仅执行一次某些操作(使该元素满足条件)?

continue;将开始下一次迭代,不确定这是否是您要寻找的。

通过到达continue关键字,程序将不得不检查是否有条件。 我想避免检查是否有条件。 我知道中断和继续,它们确实与我的问题无关。

并不是的;您每次都要使用此代码流来检查该条件。不过,有一些方法可以使其更便宜。

我建议不要使用continue,因为它会使您反复检查条件,然后失败,这可能不是您想要的。

最简单的操作可能是对布尔AND语句重新排序。

boolean executed = false;

for(Object o : Collection){

if(!executed && (o fulfills condition)){

executed  = true;

}

//other code

}

由于Java的短路特性,您将仅检查!executed,并且在其第二次及以后的运行中,其结果将为false,从而"跳过"条件检查。

这很有帮助,谢谢。

我会采用不同的方式,如下所示:

int i = 0;

for ( ; i

{

Object o = collection.get(i);

if (o fulfills condition)

{

// do what you gotta do and then

break;

}

doSomethingElse(o); // define a private method for whatever is done here

}

for ( ; i

{

doSomethingElse(collection.get(i));

}

为了遍历列表并仅在第一次满足条件时执行任务,而不是随后再测试条件,可以利用Java and运算符的短路特性。请参见以下代码:

boolean performed = false;

for(Object o : Collection){

if(!performed && o fulfills condition){

//do something

performed  = true;

}

//other code

}

执行任务后,performed标志将设置为true。当Java实现第一个操作数(&&之前的条件)的值为true时,它就不必计算o fulfills condition。这称为短路。当第二个操作数(o fulfills condition)是一个昂贵的计算,如果您不需要避免执行该计算时,此功能很有用。

不知道上下文,我建议的唯一改进是先检查执行情况-

boolean executed = false;

for(Object o : Collection){

if(executed  == false && (o fulfills condition) ){

//do something

executed  = true;

}

//other code

}

这将产生最少的副作用。否则,我不知道如何改善您的解决方案,因为您说" other-code"仍然需要执行。希望这可以帮助。

假设您仍然希望"其他代码"继续运行,并且条件测试可能很慢,请翻转测试和布尔值:

boolean doTest = true;

for(Object o : Collection){

if (doTest && (o fulfills condition)) {

doTest = false;

}

//other code

}

这样消除了负面影响,并且&&运算符可防止在doTest为false时评估条件。

doTest始终为true!doTest始终为false?

@KickButtowski doTest在条件也为true之前为true,此时它变为false:doTest = false;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值