Problem bei überlegungen von switch

Hallo an alle,
Leider ist mir kein besseres Titel eingefallen . Vieleicht schaut doch jemand rein :frowning:
die Aufgabe ist, dass der Benutzer von Komandozeille zahle eingeben muss und wenn
die Note zwischen 0-11 ist, muss nicht genügend ausgeben.
die Note zwischen 12-15 ist, muss genügend ausgeben.
die Note zwischen 16-19 ist, muss befriedigend ausgeben.
die Note zwischen 20-22 ist, muss gut ausgeben.
die Note zwischen 23-24 ist, muss sehr gut ausgeben.
werden
In der Aufgabestellung steht, dass es mit Mehrfachauswahl switch gemacht werden muss

1.Frage) muss ich scnextInt() oder mit scnextDouble() die zahl eingeben?
2.Frage) es wäre doch sehr blöd case 0 bis case 24 aufzuschreiben. Mir fehlt nichts anderes ein. Könnt ihr mir eine kleine Anweisung geben?

Danke euch Anni

1.) Ganz einfach. Welchen Datentyp wählst du wohl für Ganzzahlen? Damit sollte sich auch deine Frage beantworten
2.) cases kann kapseln. Hier mal ein KSKB:

	public static void main(String[] args) {
		char eingabe = 'j';
		
		switch(eingabe) {
			case 'a':
			case 'b':
			case 'c':
				System.out.println("Anfang");
				break;
			case 'x':
			case 'y':
			case 'z':
				System.out.println("Ende");
				break;
			default:
				System.out.println("Mitte");
		}
	}
}

Für eingabe a, b oder c wird Anfang ausgegeben, für x,y oder z wird Ende ausgegeben. Für alle Buchstaben dazwischen wird Mitte ausgegeben. Ich denke, dass sollte als Anweisung reichen, dass auf dein Problem anzuwenden überlasse ich dann wieder dir :wink:

danke @Tomate_Salat . Ich dachte nach jede zahl muss man system.out.println schreiben. Nach deine Hilfe ist etwas kürzer, aber ich hätte eine Frage ob mit eine Intervalangabe gehen wurde(Wie wurde das funktionieren?) oder ist das richtig so wie ich geschrieben habe?


public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int eingabe = sc.nextInt();
		switch (eingabe) {
		case 0:
		case 1:
		case 2:
		case 3:
		case 4:
		case 5:
		case 6:
		case 7:
		case 8:
		case 9:
		case 10:
		case 11:
			System.out.println("Sie haben " + eingabe +" Punkte, daher Note nicht genügend" );
			break;
		case 12:
		case 13:
		case 14:
		case 15:
			System.out.println("Sie haben " + eingabe +" Punkte, daher Note genügend" );
			break;
		case 16:
		case 17:
		case 18:
		case 19:
			System.out.println("Sie haben " + eingabe +" Punkte, daher Note befriedigend" );
			break;
		case 20:
		case 21:
		case 22:
			System.out.println("Sie haben " + eingabe +" Punkte, daher Note gut" );
			break;
		case 23:
		case 24:
			System.out.println("Sie haben " + eingabe +" Punkte, daher Note sehr gut" );
			break;
		default:
			break;
		}
		

	}

}```


oder so ist besser?

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	
	int eingabe = sc.nextInt();
	switch (eingabe) {
	case 12:
	case 13:
	case 14:
	case 15:
		System.out.println("Sie haben " + eingabe +" Punkte, daher Note genügend" );
		break;
	case 16:
	case 17:
	case 18:
	case 19:
		System.out.println("Sie haben " + eingabe +" Punkte, daher Note befriedigend" );
		break;
	case 20:
	case 21:
	case 22:
		System.out.println("Sie haben " + eingabe +" Punkte, daher Note gut" );
		break;
	case 23:
	case 24:
		System.out.println("Sie haben " + eingabe +" Punkte, daher Note sehr gut" );
		break;
	default:
		System.out.println("Sie haben " + eingabe +" Punkte, daher Note nicht genügend" );
		break;
	}
	

}

}

danke nochmals Anni

Intervalle kann man nicht angeben. Das zweite ist so gesehen „besser“, weil man sich die Auflistungen für den Fall, wo es die meisten cases gibt, eben spart. Darüber, was bei Zahlen <0 oder >24 passieren soll, wurde ja nichts gesagt :wink:
Trotzdem finde ich es fragwürdig, für sowas ein switch zu verwenden, aber … es geht wohl nur darum, die Sprachelemente mal kennengelernt und angewendet zu haben.

public class Main {
    public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int eingabe = sc.nextInt();
    String resultat = "nicht genügend";
    switch (eingabe) {
    case 12:
    case 13:
    case 14:
    case 15:
        resultat = "genügend";
        break;
    case 16:
    case 17:
    case 18:
    case 19:
        resultat = "befriedigend";
        break;
    case 20:
    case 21:
    case 22:
        resultat = "gut";
        break;
    case 23:
    case 24:
        resultat = "sehr gut";
        break;
    default:
        break;
    }
    System.out.println("Sie haben " + eingabe +" Punkte, daher Note " + resultat);
    }
}```

Eine weitere Sache, die hier recht praktisch erscheint, ist das Resultat in einer variable String resultat zu speichern um es danach auszugeben.
Die fünf System.out.println sehen sehr nach Copy and Paste aus.

Denke ich auch. Ist halt ein konstruiertes Beispiel. Deswegen hier noch eine Sache zum switch insbesondere zum break. Wurde einmal ein zutreffendes case gefunden, so wird jeder nachfolgende Codeblock (auch der im default) ausgeführt, bis das switch zuende ist oder man auf ein break oder return trifft. Sowas macht man sich dann auch gerne mal zu nutzen:


switch (punkte) {
    case 24:
    case 23:
        System.out.print("sehr ");
    case 22:
    case 21:
    case 20:
        System.out.println("gut");
        break;
}```

Bei 23 oder 24 Punkte wird dann aufgrund des fehlenden breaks "Sehr gut" ausgegeben.