Switch-case bei zahlenbereichen java

Hallo
ich stand mit meinem Nachhilfeschüler letztens vor einer Aufgabe, die er in seinem Informatikbuch hatte.
Rahmen war ca. so: Es gibt unterschiedliche Gewcihtsklassen, also z.b. von 0 bis 40 kilo Fliegengewicht oder von 40-60 kilo schwergewicht , von 60-80 mammut etc. etc.

Jetzt sollte man mit einer geeigneten Methode mithilfe der erfragten Gewichts die Gewichtsklasse ausgeben…

JAVA:

Mit if- else - Verzweigungen geht das ja problemlos, aber meines Wissens nach muss nach case: (beim switch-case konstrukt) ein int oder char kommen, weswegen z.b. (wert

Hallo Appex,

ich weiß auch nicht sicher wie das gedacht war, wenn es aber ein nicht zu intelligentes Buch war, haben sie vielleicht nach einer Kombination gesucht?
Nach dem Motto if x

Hallo,

ein Ausdruck wie wert

Soll es denn unbedingt die switch-Anweisung sein?

Zur Abbildung von Bereichen eignet sich die switch-Anweisung in der Tat nicht. Da ist man mit if-else-Blöcken besser beraten. Um den Code noch ein bißchen lesbarer zu gestalten, könnte man auch auf else verzichten und stattdessen return-Anweisungen verwenden:

 String gibGewichtsklasse(int gewicht) {

 if (gewicht 

Soll es aber unbedingt eine switch-Anweisung sein, könnte man sich mit folgendem Trick behelfen:



    
     String gibGewichtsklasse2(int gewicht) {
    
     switch (gewicht / 20) {
     case 0:
     case 1:
     return "Fliegengewicht";
     case 2:
     return "Schwergewicht";
     case 3:
     return "Mammut";
     default:
     return "zu schwer";
     }
     }




In beiden Fällen werden negative Werte als "Fliegengewicht" eingestuft. Da es keine negativen Gewichte gibt, würde man diese Einschränkung der Verwendung in die Beschreibung der Methode aufnehmen und bei einem Verstoß eine _Exception_ werfen. Dies aber nur so zur Info am Rande. 

Hallo apexx!

Du hast vollkommen recht. Die Switch-Anweisung in Java kann nur Ganzzahlen und Aufzählungen (enum), siehe:

http://openbook.galileocomputing.de/javainsel/javain…

Mann kann mit ihr also nur auf konkrete Werte prüfen, aber nicht auf Wertebereiche. Ich würde tatsächlich auch if-else-Anweisungen verwenden, etwa so:

public class Boxer {

 public static void main(String[] args) {
 double gewicht1 = 40.0;
 double gewicht2 = 60.0;
 double gewicht3 = 80.0;
 System.out.println("Gewicht: " + gewicht1 + " kg, Klasse: " 
 + gewichtsklasse(gewicht1));
 System.out.println("Gewicht: " + gewicht2 + " kg, Klasse: " 
 + gewichtsklasse(gewicht2));
 System.out.println("Gewicht: " + gewicht3 + " kg, Klasse: " 
 + gewichtsklasse(gewicht3));
 }

 private static String gewichtsklasse(double gewicht) {
 if (gewicht 

Die Ausgabe sieht dann so aus:



    
    Gewicht: 40.0 kg, Klasse: Fliegengewicht
    Gewicht: 60.0 kg, Klasse: Mittelgewicht
    Gewicht: 80.0 kg, Klasse: Schwergewicht




Wahrscheinlich ist aber diese Version der Methode gewichtsklasse() eher "Lehrer-kompatibel":



    
    private static String gewichtsklasse(double gewicht) {
     String ergebnis;
     if (gewicht = 50.802 && gewicht 

Hallo Apexx,

switch erwartet, wie Du schon richtig schreibst, einen Wert vom Type int, byte, short oder char. Wenn also ein Bereich (von-bis) oder (zwischen und) ausgewertet werden soll, dann kommt man um die Nutzung einer Alternative zu switch nicht herum.
Ein kompliziertes Geflecht, nur um 3 Wertebereiche auzuwerten, macht keinen Sinn. Der If…Else Konstrukt ist da schon ganz in Ordnung.