Switch case wird als char nicht erkannt....

friedfertig

Mitglied
Hallo zusammen,
ich lerne gerade Java Programmierung, seit heute morgen durchforste ich Google und diversen Foren, finde aber keine Lösung auf das Programm. Ich arbeite gerade das Skript (https://schuelerlabor.informatik.rwth-aachen.de/sites/default/files/content/leitprogramme/Java-Programmierung - Leitprogramm.pdf) durch. Leider sind die Lösungen in Skript etwas veraltet sodass man eigene Lösungen sich erarbeiten muss.
Ich bin jetzt bei Kapitel 6 zum Thema Schleifen bei der letzten Aufgabe und hänge fest.
Meine Frage: ich gebe in der Console den Buchstaben A ein aber es bleibt beim Einlesen stehen und führt mein Case 'A' gar nicht aus. Wie komme ich weiter...

Java:
public static void main(String[] args) {
    int x, y, Eingabe, Ergebnis, Anzahl, Restergebnis, Resteingabe;
    boolean fehler;
    char menuepunkt;
    Anzahl = 0;
    fehler = false;
    menuepunkt = ' ';
    while (menuepunkt != 'E') {
        System.out.print("******Kopfrechentrainerplus******");
        System.out.print("(A)ddition) (S)ubstraktion (M)ultiplikation (D)ivision (E)nde");
        Scanner scan = new Scanner(System.in);
        menuepunkt = scan.next().charAt(0);
        scan.close();
        //Solange der Benutzer keinen Fehler macht wird das Programm ausgeführt
        switch (menuepunkt) {
            case 'A':
                {
                    while (fehler == false);
                    // Zufallszahlen für x undy wiedergeben
                    Random zufall = new Random();
                    x = zufall.nextInt(99) - 99;
                    y = zufall.nextInt(99) - 99;
                    // Trainer stellt die Aufgabe
                    System.out.print("(");
                    System.out.print(x);
                    System.out.print(") + (");
                    System.out.print(y);
                    System.out.print(")=");
                    // Eingabe Schüler
                    Eingabe = scan.nextInt();
                    // Ergebnis KI
                    Ergebnis = x + y;
                    // Wenn die Lösung des Benutzers richtig ist dann
                    if (Eingabe != Ergebnis) {
                        // Fehlerausgabe und Anzahl richtige Ergebnisse
                        System.out.print("FALSCH, du hast ");
                        System.out.print(Anzahl);
                        System.out.print(" = richtige Ergebnisse");
                        fehler = true;
                    }
                    Anzahl = Anzahl + 1;
                }
                Anzahl = 0;
                fehler = false;
                break;
            }
        }
    }
}

Vielen Dank für die Unterstützung, lernen macht Spaß aber wenn man festhängt und keine kompetente Hilfe erhält, ich es sehr frustrieren.
Ich freue mich auf Hilfestellungen um das Skript abzuschließen und meine ersten Schritte erfolgreich zu feiern.
 
Zuletzt bearbeitet von einem Moderator:
Java:
import java.util.Random;
import java.util.Scanner;

public class Kopfrechnerplus {
       
    public static void main(String[] args) {
       
          int x,y,Eingabe,Ergebnis,Anzahl,Restergebnis,Resteingabe;
          boolean fehler;
          char  menuepunkt;
         
          Anzahl = 0;
          fehler = false;
          menuepunkt = ' ';
         
          while (menuepunkt != 'E') {
              System.out.print("******Kopfrechentrainerplus******");
              System.out.print("(A)ddition) (S)ubstraktion (M)ultiplikation (D)ivision  (E)nde");
              Scanner scan = new Scanner (System.in);
              menuepunkt = scan.next().charAt(0);
              scan.close();
          //Solange der Benutzer keinen Fehler macht wird das Programm ausgeführt
          switch (menuepunkt) {
              case 'A': { while (fehler == false);
         //  Zufallszahlen für x undy wiedergeben
               Random zufall =  new Random();
                  x=zufall.nextInt(99)-99;
                  y=zufall.nextInt(99)-99;        
         //  Trainer  stellt die Aufgabe
                  System.out.print("(");
                  System.out.print(x);
                  System.out.print(") + (");
                  System.out.print(y);
                  System.out.print(")=");
                 
          // Eingabe Schüler
                  Eingabe = scan.nextInt();
          // Ergebnis   KI
                  Ergebnis = x +y;
          // Wenn die Lösung  des Benutzers richtig ist dann
                  if (Eingabe != Ergebnis) {
          // Fehlerausgabe und Anzahl richtige Ergebnisse
                      System.out.print("FALSCH, du hast ");
                      System.out.print(Anzahl);
                      System.out.print("  = richtige Ergebnisse");
                      fehler =  true;
                  }
                  Anzahl = Anzahl +1;
                 
              }
                  Anzahl =  0;
                  fehler =  false;
                  break;
           
             
          }
         
       
          }
         
   
    }
   
       
    }

Vielen Dank für den Hinweis 🙂
 
Zuletzt bearbeitet:
Könnte daran liegen, dass du System in schließt, lösche einfach mal scan.close()

Was mir gerade auffällt:
- Instanziere den Scanner bitte außerhalb der while schleife, da sonst in jeder Iteration ein neues Objekt instanziert wird
- bitte beherzige die Konvention für Variablen, diese sollten immer mit kleinen Buchstaben anfangen
 
Was mir gerade auffällt:
- Instanziere den Scanner bitte außerhalb der while schleife, da sonst in jeder Iteration ein neues Objekt instanziert wird
- bitte beherzige die Konvention für Variablen, diese sollten immer mit kleinen Buchstaben anfangen
[/QUOTE]

Java:
import java.util.Random;
import java.util.Scanner;

public class Kopfrechnerplus {
        
    public static void main(String[] args) {
        
          int x,y,eingabe,ergebnis,anzahl,restergebnis,resteingabe;
          boolean fehler;
          char  menuepunkt;
          
          anzahl = 0;
          fehler = false;
          menuepunkt = ' ';
          
          Scanner scan = new Scanner (System.in);
          
          while (menuepunkt != 'E') {
              System.out.print("******Kopfrechentrainerplus******");
              System.out.print("(A)ddition) (S)ubstraktion (M)ultiplikation (D)ivision  (E)nde");
              menuepunkt = scan.next().charAt(0);
          //Solange der Benutzer keinen Fehler macht wird das Programm ausgeführt
          switch (menuepunkt) {
              case 'A': { while (fehler == false);
         //  Zufallszahlen für x undy wiedergeben
               Random zufall =  new Random();
                  x=zufall.nextInt(99)-99;
                  y=zufall.nextInt(99)-99;         
         //  Trainer  stellt die Aufgabe
                  System.out.print("(");
                  System.out.print(x);
                  System.out.print(") + (");
                  System.out.print(y);
                  System.out.print(")=");
                  
          // Eingabe Schüler
                  eingabe = scan.nextInt();
          // Ergebnis   KI
                  ergebnis = x +y;
          // Wenn die Lösung  des Benutzers richtig ist dann
                  if (eingabe != ergebnis) {
          // Fehlerausgabe und Anzahl richtige Ergebnisse
                      System.out.print("FALSCH, du hast ");
                      System.out.print(anzahl);
                      System.out.print("  = richtige Ergebnisse");
                      fehler =  true;
                  }
                  anzahl = anzahl +1;
                  
              }
                  anzahl =  0;
                  fehler =  false;
                  break;
            
              
          }
          
        
          }
          
    
    }
    
        
    }

Ich habe die Konventionen für Variablen angepasst und den Scanner vor die Schleife gezogen und scan.close() gelöscht. Leider ohne Erfolg, in der Console gebe ich A ein. Es passiert nichts, Case ‘A‘ wird nicht ausgeführt, die zweite Schleife und der Switch mit dem Case wird gar nicht in der Console ausgegeben. Es scheint als wird ‘A‘ nicht als Case erkannt und das Programm hängt dort........
 
Was fällt Dir an
while (fehler == false);
auf?

Generell solltest Du eine IDE nutzen, die Code richtig einrückt und diese Funktionalität generell nutzen. Sonst fallen so Probleme generell nicht oder nur sehr schwer auf.

Ich vermute, dass die { vor den while nach dem while kommen sollte und das das Semikolon da einfach nur versehentlich gelandet ist ...
 
Vielen lieben Dank "JustNobody", du hast mir den Tag echt gerettet. Jetzt kann ich im Skript weiter machen und mit dem Thema Array starten.
Manchmal sieht man vor lauter Bäume den Wald nicht mehr. (Aber wenn ich jeden Tag übe, werde ich zukünftig solche Fehler sehen und wie du anderen helfen können.🙂
 

Zurück
Oben