Switch ( Case ) Anwendung ?


#1

Hallo,

Ich habe eine kleine Frage.

Nehmen wir mal an ich habe für A den Wert 19
Nun wird je nach der größe A eine Varible C erzeugt mit einen bestimmen Wert.
So ungefähr sollte es aussehen:

      case 0-20: 
      C= 1;
      break;
      
      case  21-50: 
      C= 1.70;
 
      break;```

Was muss ich tun, damit ich mehere Werte einem Case zuordnen kann wie in diesem Fall 0,1,2,3...19,20 ?

#2

gibts nicht, jedenfalls nicht bis Version 1.5,
von neuesten Wunder-Versionen auch noch nicht gehört, aber sicher kann ich es nicht sagen

if/ else if ist die einfache Alternative,

Rechnung wäre auch noch denkbar, hier / 10 oder 20 (int/ int rundet ab, 19/20 = 0) und dann switch auf die wenigen verbleibenden Werte

recht erschöpfende Auflistung von Varianten inklusive Fallthrough und Formatierungs-Spielereien:
In Java,Using switch statement with a range of value in each case? - Stack Overflow
Suche war ‘java switch range’


#3

Nur mal als Denkanstoß:

Ein [INLINE]switch[/INLINE], dass nicht in einer Factory zum Erzeugen konkreter Klassen eingesetzt wird ist immer ein Zeichen für nicht eingesetzt Polymorphie.

bye
TT


#4

zu switch an sich oder nicht hier weiter
http://forum.byte-welt.net/java-forum-erste-hilfe-vom-java-welt-kompetenz-zentrum/allgemeine-themen/13437-smells-switch.html
habe da noch eine Kleinigkeit anzumerken :wink:


#5

Erst einmal: Variablen-Namen sollten in Java immer klein geschrieben werden (Ausnahme: [inline]static final[/inline]-“Konstanten”).

Für das obige Problem könnte eine [inline]TreeMap[/inline] helfen:

TreeMap<Integer, Double> treeMap = new TreeMap<>();
treeMap.put(0, 1.0);
treeMap.put(21, 1.7);
//... weiter Abstufungen

c = treeMap.floorEntry(a).getValue(); 

Statt Untergrenzen kann man auch Obergrenzen angeben und dann mit [inline]ceilingEntry[/inline] abfragen


#6

Ich denke auch, das man um die [INLINE]if[/INLINE]s nicht herum kommt.

Aber man kann es etwas leserlicher machen:

    private final T value;
    public Condition(T value) {
        this.value = value;
    }
    public boolean isBetween(T lowLimit, T highLimit) {
        return 0 < value.compareTo(lowLimit)
                && 0 > value.compareTo(highLimit);
    }
}```
wird dann so angewendet:```Condition<Integer> myValue = new Condition<Integer>(a);
if(myValue.isBetween(0,20))
      c= 1;
if(myValue.isBetween(21,50))
      c= 1.70;```

oder man nimmt eine ausgefeiltere Lösung aus dem abgetrennten Thread...

bye
TT