2015-03-06 2 views
6

Ich möchte eine switch-Anweisung verwenden, um eine Reihe von Zahlen überprüfen ich ein paar Plätze gefunden haben, etwas zu sagen, wie case 1...5 oder case (score >= 120) && (score <=125) funktionieren würde, aber ich erhalte Fehler nur irgendwie halten.java - switch-Anweisung mit einer Reichweite von int

Was ich will ist, wenn die Nummer zwischen 1600-1699 ist dann etwas tun.

Ich kann tun, wenn Aussagen aber dachte, es ist Zeit zu starten, Schalter zu verwenden, wenn möglich.

+2

Es gibt Zeiten für einen ‚wenn‘, und es gibt Zeiten für einen ‚Schalter ". * Dies ist eine Zeit für ein 'wenn'. –

Antwort

5

Soweit ich weiß, sind Bereiche für Switch-Fälle in Java nicht möglich. Sie können etwas wie

switch (num) { 
    case 1: case 2: case 3: 
    //stuff 
    break; 
    case 4: case 5: case 6: 
    //more stuff 
    break; 
    default: 
} 

tun Aber an diesem Punkt können Sie auch bei der if-Anweisung bleiben.

2

Sie ternären Operator verwenden können, ? :

int num = (score >= 120) && (score <=125) ? 1 : -1; 
num = (score >= 1600) && (score <=1699) ? 2 : num; 
switch (num) { 
    case 1 : 
     break; 
    case 2 : 
     break; 
    default : 
     //for -1 
} 
9

Auf der JVM-Ebene switch Aussage unterscheidet sich grundsätzlich von if-Anweisungen.

Bei Switch handelt es sich um Kompilierzeitkonstanten, die alle zur Kompilierzeit angegeben werden müssen, damit der Javac-Compiler effizienten Bytecode erzeugt.

In Java switch Anweisung unterstützt keine Bereiche. Sie müssen alle Werte angeben (Sie könnten die Fälle durchfallen) und default Fall. Alles andere muss durch if Anweisungen behandelt werden.

1

Wenn Sie wirklich wollen switch-Anweisungen-hier verwenden, ist ein Weg, pseudo-Bereiche mit enum s zu erstellen, so dass Sie über die Aufzählungen wechseln.

Zuerst werden wir die Bereiche erstellen müssen:

public enum Range { 

    TWO_HUNDRED(200, 299), 
    SIXTEEN_HUNDRED(1600, 1699), 
    OTHER(0, -1); // This range can never exist, but it is necessary 
        // in order to prevent a NullPointerException from 
        // being thrown while we switch 

    private final int minValue; 
    private final int maxValue; 

    private Range(int min, int max) { 
     this.minValue = min; 
     this.maxValue = max; 
    } 

    public static Range getFrom(int score) { 
     return Arrays.asList(Range.values()).stream() 
      .filter(t -> (score >= t.minValue && score <= t.maxValue)) 
      .findAny() 
      .orElse(OTHER); 
    } 
} 

und dann Schalter:

int num = 1630; 
switch (Range.getFrom(num)) { 

    case TWO_HUNDRED: 
     // Do something 
     break; 

    case SIXTEEN_HUNDRED: 
     // Do another thing 
     break; 

    case OTHER: 
    default: 
     // Do a whole different thing 
     break; 
}