web-dev-qa-db-de.com

Wie wird in einer switch-Anweisung ein Wert größer oder gleich verwendet?

Was ist der beste Weg, um zu prüfen, ob die Variable größer ist als eine andere Anzahl, wenn Sie die switch-Anweisung verwenden? Oder empfehlen Sie, if-else zu verwenden? Ich habe ein solches Beispiel gefunden: 

int i;

if(var1>var2) i = 1;
if(var1=var2 i = 0;
if(var1<var2) i = -1;

switch (i);
{
    case -1:
    do stuff;
    break;

    case 0:
    do stuff;
    break;

    case 1:
    do stuff;
    break;

}

Was können Sie einem Anfänger über die Verwendung von "größer als oder gleich" in Wechselanweisungen erzählen?

10
Vlad Holubiev

Nicht sicher, ob Sie das fragen, aber Sie könnten es so machen:

int var1;
int var2;

int signum = Long.signum((long)var1 - var2);
switch(signum) {
    case -1: break;
    case 0: break;
    case 1: break;
}
19
Stewart

Ich würde dringend ein if(var1>var2){}else if (var1==var2) {} else {} Konstrukt empfehlen. Wenn Sie hier einen Schalter verwenden, wird die Absicht ausgeblendet. Und was ist, wenn eine break irrtümlich entfernt wird?

Die Umstellung ist für aufgezählte Werte nützlich und klar, nicht für Vergleiche.

11
Guillaume

Zuerst ein Vorschlag: switch, da es nur zum Umschalten und nicht zur Zustandsüberprüfung verwendet werden soll.

Aus JLS-Switch-Anweisungen

SwitchStatement:
    switch ( Expression ) SwitchBlock

In int oder Enumler konvertierbare Ausdrücke werden im Ausdruck unterstützt.

Diese Labels sollen der switch-Anweisung als .__ zugeordnet sein. sind die Werte der konstanten Ausdrücke (§15.28) oder der Enumenkonstanten (§8.9.1) in den Falletiketten.

Es werden auch nur konstante Ausdrücke und Aufzählungskonstanten in switch-Anweisungen für Version 1.6 oder niedriger mit Java 7-Zeichenfolgewerten unterstützt. Es werden keine logischen Ausdrücke unterstützt.

Alternativ können Sie auch @ @ Stewart in seiner Antwort angeben. 

6
Narendra Pathai

Java unterstützt nur direkte Werte und keine Bereiche in case-Anweisungen. Wenn Sie also einen Schalter verwenden müssen, müssen Sie zuerst Optionen zuordnen und dann aktivieren, da in dem von Ihnen angegebenen Beispiel Ihre einzige Wahl besteht. Das ist jedoch ziemlich übertrieben - verwenden Sie einfach die if-Anweisungen.

4
Oliver Matthews

Eine switch-Anweisung dient zum Ausführen von Code, wenn bestimmte Werte zurückgegeben werden. Mit if-else können Sie dann einen Wertebereich in einer Anweisung auswählen. Ich würde empfehlen, etwas wie das Folgende zu machen (obwohl ich persönlich die Integer.signum-Methode vorziehen würde), wenn Sie mehrere Bereiche betrachten möchten:

int i;

if (var1 > var2) {
  i = 1;
}
else if (var1 == var2) {
  i = 0;
}
else {
  i = -1;
}
3
talegna

Mit den if-Anweisungen sind Sie besser aufgehoben. der switch-Ansatz ist viel weniger klar, und in diesem Fall ist Ihr switch-Ansatz objektiv falsch. Der Vertrag für Comparable#compareTo erfordert keine Rückgabe von -1 oder 1, nur dass der Wert der zurückgegebenen int negativ oder positiv ist. Es ist absolut legitim für compareTo, -42 zurückzugeben, und Ihre switch-Anweisung würde das Ergebnis löschen.

2
chrylis

Wenn der Wert von one variable verwendet wird, verwenden Sie den Schalter. Wenn mehrere Variablen im Spiel sind, verwenden Sie if. In Ihrem angegebenen Problem sollte esifsein.

0
Sajal Dutta

Leider ist das in Java nicht möglich. Es ist in CoffeeScript oder anderen Sprachen möglich.

Ich würde empfehlen, eine if-else- Anweisung zu verwenden, indem Sie Ihr "do stuff" in zusätzlichen Methoden verschieben. Auf diese Weise können Sie Ihr if-else in einem gut lesbaren Code aufbewahren.

0
treeno