Java (Fehler bei Switch-case / Methode): Kann mir jemand sagen, warum und wie ich das abändern kann?
Hallo,
ich habe ein Programm mit switch-case geschrieben, durch welches mir Schulnoten in String umgewandelt werden. Jedoch funktioniert die Methode nicht, wenn ich void habe.
Also, es möchte einen Rückgabeparameter haben, was für mich keinen Sinn ergibt. Es wird mir ein Fehler bei
System.out.println(...);
angezeigt, wenn ich es ohne Rückgabeparameter haben möchte.
Kann mir jemand sagen, warum und wie ich das abändern kann?
Hier ist das Programm:
public class SwCase {
public static void main(String[] args) {
int number = (int) (Math.random()* 6 + 1);
System.out.println(letter(number)); // hier kommt der Fehler
}
public static void letter(int number) {
switch (number) {
case 1:
System.out.println("sehr gut");
break;
case 2:
System.out.println("gut");
break;
case 3:
System.out.println("befriedigend");
break;
case 5:
System.out.println("mangelhaft");
break;
case 6:
System.out.println("ungen\u00fcgend");
}
}
}
3 Antworten
Du hast Note 4 vergessen (ist aber nicht Schuld an deinem Fehler)
- Statt System.out.println("sehr gut"); schreibst du return "sehr gut" etc.
- Statt public static void letter(int number) schreibst du: public static String letter(int number)
Wenn du kein switch haben möchtet, kannst du auch ein Array definieren:
String noten[] = { "0", "sehr gut", "gut", ...", ungen\u00fcend" };
public static String letter(int number)
{ return noten[number]; }
Frei nach dem Motto: Mensch sei helle, nimm 'ne Tabelle.
Aber der Zugriff wirft eine Exception, wenn der index in [...] einen ungültigen Wert außerhalb des Bereiches hat.
Ja, du kannst 2 Dinge machen:
Du hast hier stehen
1. System.out.println(letter(number)) und
2. public static void letter(int number)
Das heißt bei 1 gibst du "etwas" aus, und dieses "etwas" wird durch deine Funktion letter() bestimmt. Was du jetzt gemacht hast ist: "Ich gebe etwas aus" und hast dann die Funktion aufgerufen, die aber garnichts zurückgibt! (Sie ist ja void). In der letter() Funktion hast du nämlich direkte Ausgaben (mit System.out.print.......).
Also 1. entweder du gibst mit der Funktion direkt die Noten mit System.out.print("Note") und packst die Funktion nicht in eine eigene Ausgabe
letter(number);
oder 2. (eleganter) statt void machst du einen String als Rückgabewert der letter() funktion und machst dann bei jedem case ein return "DeinString";
und
public static void letter(int number){
public static String letter(int number){
switch (number){
case 1 :
return "sehr gut";
case 2 :
return " gut";
case 3 :
return "befr";
case 5 :
return "ausr";
case 6 :
return "unge";
default:
return null;
}
}
Ohhh stimmt! Danke!!