2013-08-05 16 views
5

我想刷新我的Java,因爲它已經很長時間了,並開始在CodingBat.com上進行一些熱身活動。 (提防擾流板可以效法);)使用Java檢查多個條件時的效率

我只是做了一個非常簡單的一個說:

鑑於2個整數,a和b,返回真,如果一個,如果他們是10或如果他們的 總和10.

makes10(9,10)→真
makes10(9,9)→假
makes10(1,9)→真

我的解決辦法是:

public boolean makes10(int a, int b) 
{ 
    if(a==10 || b==10) 
    return true; 
    else 
    { 
     if((a+b)==10) 
      return true; 
     else 
      return false; 
    } 
} 

給出的解決方案是:

public boolean makes10(int a, int b) { 
    return (a == 10 || b == 10 || a+b == 10); 
} 

我的問題是在的情況下,一個= 10或b = 10將給出解決方案的if語句結束並返回true還是會先完成檢查每一種情況都需要不需要的加法操作? (即a + b)

在C++中有一個這種行爲的名稱,但對於我的生活,我不記得它是什麼。

+0

另請參閱:http://stackoverflow.com/questions/7101992/why-do-we-usually-use-not-what-is-the-difference – assylias

+1

該行爲被稱爲「短路」評估。 – resueman

+0

雖然第二種方法更有效率,但請記住您的代碼在功能上是一致的:) – Deactivator2

回答

6

將評估條件,直到一個子條件評估爲true。如果第一個條件評估爲true,則不評估第二個和第三個條件。

這是or運營商||的性質。

考慮下面的例子:

public class Conditions { 

    public static boolean isTrue(){ 
     System.out.println("Is True"); 
     return true; 
    } 

    public static boolean isFalse(){ 
     System.out.println("Is False"); 
     return false; 
    } 

    public static void main(String[] args) { 
     if(isFalse() || isTrue() || isTrue()){ 
      System.out.println("Condition passes"); 
     } 
    } 
} 

,其輸出:

Is False 
Is True 
Condition passes 

注意,它調用方法isTrue()第三條件不評估。

0

任何真正將決定所有的OR的結果(A ||乙||Ç|| d || E)

任何虛假將決定所有與運算的結果(A & &乙& & ç& & d & & E)

因此在決定值的語句進行評價的第一次出現。