Nein, verstanden habe ich es noch immer nicht. Aber ich wage noch einen Versuch:
Code:
double gramm = 78.4;
int wert = (int) (gramm / 10.0);
double porto;
switch (wert) {
case 0:
case 1:
porto = 2.0;
break;
case 2:
case 3:
case 4:
porto = 2.5;
break;
case 5:
case 6:
case 7:
case 8:
case 9:
porto = 3.0;
break;
default:
porto = 3.5;
break;
}
In Java musst du bei einem switch-Kontrukt immer diskrete Werte angeben. Intervalle kannst du durch fall-throughs simulieren. Dabei lässt man halt einfach das "break" weg. Aber es gibt Sprachen (z. B. Pascal), die erlauben das Angeben von Wertebereichen bei einem "case", aber meistens ist dann ein fall-through nicht möglich.
Besser ist es aber, wenn du für so etwas "if" benutzt:
Code:
if (gramm < 20.0)
porto = 2.0;
else if (gramm < 50.0)
porto = 2.5;
else if (gramm < 100.0)
porto = 3.0;
else
porto = 3.5;
Aber das ist ja nicht die Aufgabe.
Manchmal ist es schwierig zu erahnen, was Profs eigentlich wollen. Nicht besser wird es, wenn deren Aufgaben von Dritten nur umschrieben wiedergegeben werden. Das "fall-through" ist schon etwas besonderes und Anfänger kommem da nicht sofort drauf. Dass das jetzt aber eine "Herausforderung" ist, wage ich zu bezweifeln.
Geht es wirklich darum, ob es möglich ist, oder geht es darum wie es möglich ist!?
Naja, wenn Du ein "festes Intervall" hast so ist dies eigentlich relativ einfach möglich:
Code:
int intervall = 20;
int theValue = 10;
int switchValue = theValue / intervall;
switch( switchValue ) {
case 0:
System.out.println( "Wert ist zwischen 0 und 19" );
break;
case 1:
System.out.println( "Wert ist zwischen 20 und 39" );
break;
case 2:
System.out.println( "Wert ist zwischen 40 und 59" );
break;
default:
System.out.println( "Wert ist >= 60" );
break;
}
Wenn dies nicht der Fall ist, so kannst Du u.U. über eine andere Berechnungsvorschrift darauf kommen. Ansonsten sehe ich -ohne groß darüber nachzudenken- nur die Möglichkeit mittelst if-else den case-Wert zu bestimmen. Vermutlich wird es dafür aber dann nicht die 15 Punkte geben!?
diese 15 Punkte kannst du dir kaum holen, man kann bei
Code:
switch(zahl)
wohl kaum irgendwas tricksen: das geht nicht!
es sei denn er akzeptiert den Trick mit einer Abbildung Bereich -> int, so wie alle bisher gezeigten Lösungen
0-10 -> 0, 11-20 ->1, 21-30 -> 2 usw.
(könnte man durch Einsatz von Enums sogar aufhübschen); aber dann heisst es ja plötzlich
Code:
switch(eineFunktionDavon(zahl))
und ob das im Sinne der Aufgabenstellung ist?
in der case Klausel MUSS ein zur Compile-Zeit (!) berechenbarer konstanter integraler Wert (oder ein Enum-Wert) stehen, also ist die Aufgabe ziemlich sinnlos
Beispiel Briefe:
0-50g 1 Euro
51-100g 2 Euro
101-250g 3 Euro
251g - 500g 4 Euro
>500g: 5 Euro
Code:
int wert = 237; // Wert ist das Gewicht des Briefes, habs hier einfach mal fest mit 237g reingeschrieben
double kosten;
final int a = wert;
switch (wert){
default: // fällt durch
case 0:{
kosten = 1.0;
if (wert <= 50) break;
}
case 51: // nur falls wert >50
{
kosten = 2.0;
if (wert <= 100) break;
}
case 101: // nur falls wert >100
{
kosten = 3.0;
if (wert <= 250) break;
}
case 251: // nur falls Wert >250
{
kosten = 4.0;
if (wert <= 500) break;
}
case 501: kosten = 5.0; // nur falls Wert >500
}
System.out.println("Kosten: " + kosten);
Erklärung:
Man braucht den default-Fall um überhaupt mal reinzukommen. In default geht er immer rein, egal welche Zahl in "wert" steht.
Man kommt auf jeden Fall in "case 0", da beim default-Fall kein break steht, amn nutzt also die Eigenschaft des "durchfallens" aus. Die kosten werden jetzt auf 1 Euro gesetzt.
Ist der Brief leichter als 51g wird "break" aufgerufen, d.h. man springt aus dem switch raus. Ansonsten fällt man wieder durch ins nächste case, dort wird dann wieder entschieden ob der Brief leichter oder schwerer als 100 g ist usw.
Man kommt also nur z.B. in "case 51" wenn der Brief >=51g wiegt, in "case 101" wenn der Biref >=101g wiegt usw.
mfg
Nova
Edit:
hab den Code nochmal leicht umgeschrieben damit er verständlicher ist.
Edit2:
Mir fällt gerade auf das man "case 0" gar nicht braucht, könnte man auch in den default-Fall schreiben, wäre auch logischer:
Jeder Brief (=>default) kostet mindestens 1 Euro, wiegt der Brief mindestens 51g kostet er mindestens 2 Euro usw.