2016-03-23 87 views
0

在我的代碼我要檢查,如果狗object的狀態不是是3 Enums在If語句中使用多個條件的正確方法?

if((dogList.get(i).getStatus()!= dogStatus.SLEEPING 
    || dogList.get(i).getStatus()!= dogStatus.WALKING 
    ||dogList.get(i).getStatus()!= dogStatus.EATING )){ 

//do something 

} 

這是對3個||條件相結合的正確方法?我問,因爲我的計劃沒有像我期望的那樣行事。

+4

它是「正確的」,但它不正確。你正在測試不平等。由於getStatus()只能有一個值,因此總是將其評估爲TRUE,因爲其他兩個語句不能相等。你需要'&&'而不是。考慮這個等價物:如果這隻貓不是一隻狗,這隻貓不是一隻大猩猩,而這隻貓不是一隻貓。 V.S.與'或'而不是'和'等價。 –

+0

你會想用'&&'(AND)代替'||'(OR)。例如,如果狀態爲WALKING,那麼if會讀取「TRUE ||」 FALSE ||當TRUE && FALSE && TRUE = FALSE時,TRUE = TRUE' –

回答

5

你想

if (status != SLEEPING && status != WALKING...) 

注意「& &」,因爲要檢查它不是WALKING這不是SLEEPING

2

直接回答你的問題是您應該使用&&而不是||,正如this answer中所解釋的那樣。但是,由於您使用的是enum,因此您可以使用switch來清理它。

switch (dogList.get(i).getStatus()) { 
    case SLEEPING:case EATING:case WALKING: 
     break; 
    default: 
     // write your code here. 
} 

(從技術上講這是不完全一樣的,如果結果是null,而switch拋出一個NullPointerException你(修正)版本執行的代碼)。

+0

雖然這是一個有效的替代方案,但我不確定這個*是否直接回答上述問題... –

+0

@BrianAgnew你是對的。我會編輯。 –