2013-05-06 102 views
0

編碼bat邏輯-2,loneSum問題我在下面列出的第一種方法中鍵入。除了只有一個測試以外,所有測試都是正確的。唯一失敗的是所有變量等於相同整數的地方。但是當我在網上查找解決方案時,我得到了下面列出的第二種方法,並且工作。我認爲我的方法和正確的解決方案之間的唯一區別是「else if(a == b & & b == c){return 0;}」的位置。我的問題是這些條件的順序在「if else」陳述中是否重要? (我提前道歉的措辭,英語不是我的第一語言,謝謝。)確定if語句的條件的順序嗎?

public int loneSum(int a, int b, int c) { 
     int sum = a + b + c; 
     if(a==b) 
     {return c;} 
     else if(b==c) 
     {return a;} 
     else if(c==a) 
     {return b;} 
     else if(a==b && b==c) 
     {return 0;} 
     else 
     return sum; 
    } 

public int loneSum(int a, int b, int c) { 
    int sum = a + b + c; 

if(a==b && b==c) 
    {return 0;} 
    else if(b==c) 
    {return a;} 
    else if(c==a) 
    {return b;} 
    else if(a==b) 
    {return c;} 
    else 
    return sum; 
} 
+4

如果條件不是「互斥」,那麼它們的順序**將會很重要。 – 2013-05-06 20:46:10

回答

1

簡單的樣品,2種相同的方法,只是順序不同,如果else語句:

String method1(int input) { 
    if (input > 1) { 
     return "Foo"; 
    } else if (input > 5) { 
     return "Bar"; 
    } 
    return "Baz"; 
} 

String method2(int input) { 
    if (input > 5) { 
     return "Bar"; 
    } else if (input > 1) { 
     return "Foo"; 
    } 
    return "Baz"; 
} 

呼叫與輸入兩種方法,可以說9.你認爲他們會返回相同的字符串?

+0

是的,我看到,沒有我認爲它會返回第一個真實的條件。謝謝 – 2013-05-06 20:53:25

0

提示:如果a == 1b == 1c == 1

擾流板:你的代碼返回1,而結果應爲0

2

是,條件的事項的順序。在你的代碼中,你首先測試if(a==b)。如果所有3個整數都相同,那麼這將是true並且只有return c;將執行。它甚至不會打擾其餘的條件。

ifelse-if中,按照順序評估所有條件直到發現第一個true條件。

首先測試更具體的情況,即首先測試if(a==b && b==c)

+0

好的,謝謝。 – 2013-05-06 20:47:50

0

請記住,如果/ else-if/else按順序執行,並在發現可接受的情況時停止。在你的榜樣,如果a=5, b=5, c=5,你會回到c時應該返回0。

這是因爲a==ba==b && b==c不是相互排斥的 - 他們既可以是真實的,所以訂單事宜。如果您先檢查a==b,則永遠不會進行更復雜的檢查。你會想從最具體的檢查走到最不具體的檢查。

0

是的,因爲如果第一個if中的條件滿足,它就會在滿足條件的條件下執行語句,並且不會打擾它下面的if else語句。

1

當然這很重要。

拿這個代碼片段一看:

if (a) { 
    doA(); 
} else if(a && b) { 
    doAB(); 
} 

比較:

if (a && b) { 
    doAB(); 
} else if(a) { 
    doA(); 
} 

讓我們假定這兩個abtrue

在第一種情況下doA()將被調用,因爲我們首先測試a。在第二種情況下,將執行doAB()