天天看點

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;