2016-03-23 4 views
0

In meinem Code möchte ich, wenn der Status eines Hundes überprüfen objectist nicht, dass von 3 Enums:Korrekte Möglichkeit, mehrere Bedingungen in If-Anweisung zu verwenden?

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

//do something 

} 

Ist dies der richtige Weg, um die 3 || Bedingungen zu kombinieren? Ich frage, wie sich mein Programm nicht so verhält, wie ich es erwarte.

+4

es ist "richtig", aber es ist nicht korrekt. Sie testen auf Ungleichheit. Da getStatus() immer nur einen Wert haben kann, werden Sie immer als WAHR bewerten, weil die anderen beiden Anweisungen nicht gleich sein können. du willst stattdessen '&&'. Betrachten Sie dieses Äquivalent: wenn diese Katze kein Hund ist und diese Katze kein Gorilla ist und diese Katze keine Katze ist. vs. das Äquivalent mit "oder" anstelle von "und". –

+0

Sie würden '&&' (AND) anstelle von '||' (OR) dafür verwenden. Zum Beispiel, wenn der Status WALKING war, würde Ihr if 'TRUE || lesen FALSCH || TRUE = TRUE, wenn 'TRUE && FALSE && TRUE = FALSE' –

Antwort

5

Sie wollen

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

Beachten Sie die ‚& &‘, da man es nicht WALKINGüberprüfen möchten und es ist nicht SLEEPINGund so weiter

2

Die direkte Antwort auf Ihre Frage ist dass Sie && nicht || verwenden sollten, wie gut in this answer erklärt. Da Sie jedoch einen enum verwenden, können Sie dies aufräumen, indem Sie switch verwenden.

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

(Technisch gesehen ist dies nicht genau die gleiche wie Ihre (korrigierte) Version als dass der Code ausgeführt wird, wenn das Ergebnis null ist, während switch ein NullPointerException wirft).

+0

Während es eine gültige Alternative ist, bin ich mir nicht sicher, dass * die obige Frage direkt beantwortet ... –

+0

@BrianAgnew Sie haben Recht. Ich werde bearbeiten. –

Verwandte Themen