Switch ( Case ) Anwendung ?

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 ?

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’

Nur mal als Denkanstoß:

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

bye
TT

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:

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

Für das obige Problem könnte eine TreeMap 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 ceilingEntry abfragen

Ich denke auch, das man um die ifs 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