catch(InputMismatchException) wird nicht ausgefürt/erkannt

triade

Aktives Mitglied
Hallo,
dieser Code dient dazu ein rate spiel zu spielen, man muss eine Zahl zwischen 1-5 erraten dies funktioniert soweit,
allerdings soll der Code zusätzlich falsche eingaben wie Buchstaben, Sonderzeichen & Zahlen die kein int sind abfangen und den nutzer mitteilen das er nur int Zahlen eingeben soll. Falls man eine ungültige Eingabe tätigt kommt die Fehlermeldung "java.util.InputMismatchException" Diese habe ich dann bei dem Catch hinzugefügt, dennoch wird mir die Fehlermeldung weiterhin angezeigt.
Fehlermeldung: "
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at Aufgabe4.main(Aufgabe4.java:17)
"
Weiß wer woran es hagt?

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

public class Aufgabe4
{
    public static void main (String[] args)
    {
        Scanner zeta = new Scanner(System.in);

        int min = 1;
        int max =15;
        int z =(int)(Math.random() * ((max-min)))+min;
      

        System.out.println("Raten sie eine Zahl zwichen 1-15, sie haben 5 versuche.");

        int ez = zeta.nextInt();
        int vz = 0;
        
        try
        {
            while(ez!=z )// && vz>5)
            {
                System.out.println("Die von Ihnen eratene Zahl in nicht die Zufallszahl.");
                if(ez>z)
                {
                    System.out.println("Sie liegen oben drer.");
                }
                else
                {
                    System.out.println("Sie liegen unten drunter.");
                }
                System.out.println("Versuchen sie es ernuert.");
                /*
                vz = vz++;
                if(vz<=10)
                {
                    System.out.println("Sie haben schon 10 versuche benötigt.");
                }
                */
            
                
                ez = zeta.nextInt();
            

            }
          
        }
        catch(InputMismatchException e)
        {
            System.out.println("Geben sie bitte nur gültige Zahlen an, sonst nichts anderes!!");
        }
        System.out.println("Sie haben die zufällige Zahl "+z+" eraten.");
        
        
        
    }

}
 

KonradN

Super-Moderator
Mitarbeiter
Und zur Ergänzung: Du solltest Dir auch noch einmal Gedanken zu der ganzen logik machen. Was soll z.B. in der Schleife passieren?

Und bei so Dingen kann es sehr hilfreich sein, wenn man den Code in Methoden unterteilt. Das macht es dann deutlich einfacher, Logik-Fehler zu sehen und zu beheben. Je tiefer die Verschachtelung, um so schwerer ist es, den Überblick zu behalten.
 

triade

Aktives Mitglied
Und zur Ergänzung: Du solltest Dir auch noch einmal Gedanken zu der ganzen logik machen. Was soll z.B. in der Schleife passieren?

Und bei so Dingen kann es sehr hilfreich sein, wenn man den Code in Methoden unterteilt. Das macht es dann deutlich einfacher, Logik-Fehler zu sehen und zu beheben. Je tiefer die Verschachtelung, um so schwerer ist es, den Überblick zu behalten.
Der Code erstellt eine zufällige zahl und mit der schleife solange die eingabe vom Nutzer nicht mit der Zufälligen Zahl übereinstimmt soll er den Nutzer erneurt nachd er Zahl fragen und ihn einen tipp geben ob er über der zufällugen zahl ist oder da drunter und ihn dazu anfodern eine ernuerte eingabe zu tätigen. Und der int vz soll mitrechnen wie viele versuche der nutzer benötigt und nach einer bestimmten anzahl ihn ddaruaf anweisen das habe ist aber erstmal als kommi angemerkt.

Und ja die Struktur in der schleife ist etwas irreführend und strukturfwhlwn das werde ich noch verbessern vielen dank.
 

KonradN

Super-Moderator
Mitarbeiter
Mir war schon klar, was dein Code machen soll nur eben macht er vermutlich einfach nicht das, was du gerne hättest.

Du kannst es ansonsten einfach ausprobieren- was passiert, wenn du die nextInt Abfrage unter das try ziehst?
 

KonradN

Super-Moderator
Mitarbeiter
Jetzt doch noch einmal statt vom Smartphone eine ausführliche Antwort vom Computer aus.

Divide and Conquer
Der Grundsatz Teile und Herrsche ist mit einer der wichtigsten Grundsätze in der Informatik. Komplexe Probleme werden unterteilt in kleiner Probleme und so gelöst. Das zieht sich quer durch wirklich alle Bereiche. Dabei ist ein wichtiger Teilpunkt, das Code übersichtlich bleibt. Das ist etwas, das selbst in der professionellen Software-Entwicklung von den Entwicklern gemacht wird und da wäre es kein Thema, so Code relativ schnell zu überblicken. Aber man muss halt schon genauer hin schauen, dabei kann man leicht etwas übersehen, daher: Auch als Senior Software Engineer hält man sich an sowas.

Das ist aber nur reine Theorie. Wie kommt man denn dahin? Und da bevorzuge ich immer eine strukturierte Herangehensweise:
1. genaues Verständnis der Abläufe. (Das schimpfen wir dann gerne fachliche Abhängigkeiten oder so) Was soll genau passieren? Wie soll das System sich verhalten. Das wird nieder geschrieben und zwar nicht in Code sondern in Worten. Das kann erst einmal in Form von Anforderungen sein, aber vor der Implementierung wird auch die Logik festgelegt.
Damit hat man dann eine Übersicht des Ablaufs. Das kann bei Dir sein:
  • Abfrage einer Zahl
  • Wenn die Zahl nicht die gesuchte Zahl ist: Tipp geben und weiter beim ersten Punkt
  • Sonst gratulieren zu gefundener Zahl und Ende.

Das kann so grob bezeichnet werden. Jetzt ist es aber nicht unüblich, dass ein Punkt zu komplex ist. "Abfrage einer Zahl" wird hier noch komplexer. Also wird das noch weiter beschrieben:

Abfragen einer Zahl:
  • User auffordern, eine Zahl einzugeben
  • Wert einlesen
  • Wenn Wert keine Zahl ist, dann beim Anfang starten.
  • Wert/Zahl zurück geben

Man erkennt, dass man hier eine saubere Strukturierung hat.

2. Wenn man diese Strukturierung hat, dann kann man das implementieren. Und das geht - so die Beschreibung ausreichend war - 1:1:
Aus "Abfragen einer Zahl" wird dann einfach ein Methodenaufruf: frageZahlAb()

Was gewinnt man dadurch: Man hat kleine Dinge, die man leicht überblicken kann. Die Methode frageZahlAb() hat dann am Anfang nur den nextInt() Aufruf. Dann ist klar: Nur der wird in ein try / catch gepackt. und man muss da nur diesen Bereich betrachten.
Und man hat Dinge, die leichter mehrfach verwendet werden können. In Deinem Code hast zwei so Abfragen - das wäre also dann einfach zwei mal so ein Methodenaufruf.

Das muss man aber so nicht machen. Man kann da auch anders heran gehen. Das wäre dann ein rein praktischer Weg durch ein Doing. Das ist eine Alternative zu der strukturierten Herangehensweise zu der ich eigentlich immer rate.

Du hast einen ersten Code geschrieben, der vermutlich etwas in der Art sein dürfte:
Java:
import java.util.Scanner;
import java.util.InputMismatchException;

public class Aufgabe4
{
    public static void main (String[] args)
    {
        Scanner zeta = new Scanner(System.in);

        int min = 1;
        int max =15;
        int z =(int)(Math.random() * ((max-min)))+min;
      
        System.out.println("Raten sie eine Zahl zwichen 1-15, sie haben 5 versuche.");

        int ez = zeta.nextInt();
        
        while(ez!=z)
        {
            System.out.println("Die von Ihnen eratene Zahl in nicht die Zufallszahl.");
            if(ez>z)
            {
                System.out.println("Sie liegen oben drer.");
            }
            else
            {
                System.out.println("Sie liegen unten drunter.");
            }
            System.out.println("Versuchen sie es ernuert.");
            ez = zeta.nextInt();
        }
        System.out.println("Sie haben die zufällige Zahl "+z+" eraten.");   
    }
}
Das konnte man testen und heya - geht ganz gut. Nur wenn man mal keine Zahl eingibt sondern Hugo oder Hallo, dann kommt die Exception. Also will man die falschen Eingaben behandeln.

Hier muss man dann schauen: Wo ist etwas anzupassen? Und das sind dann hier die beiden zeta.nextInt(); Aufrufe. Also gehst Du hin und behandelst nur diese! Also wirklich das try / catch so klein wie möglich halten!
Und dann kannst Du da bauen, was Du für richtig erachtest.

In Deinem Fall wirst Du den Code aber dann wirklich 1:1 an zwei Stellen haben. In so einem Fall findet dann ein sogenanntes Refactoring statt: Der doppelte Code wird in eine Methode gezogen.
==> Also auch über diesen Weg kommen wir zu einem Aufbau, der vergleichbar ist mit dem strukturierten Ansatz.

Hier wäre dann sowas wie eine goldene Regel: Halte try/catch Blöcke so klein wie möglich. Klar, es kann sich dann heraus stellen: Hey, direkt danach kommt gleich die nächste Exception. Die gehört da mit rein. Dann macht man das. Aber die Kernidee ist dann, dass man erweitert. Man packt nicht direkt alles in ein try / catch. (Das einfach als eine Art Best Practice betrachten).


An der Stelle möchte ich nicht verschweigen, dass man natürlich auch viel direkt im Code machen kann ohne weitere Unterteilung. So wäre natüröich denkbar, durch eine do while Schleife nur eine Stelle zu haben, bei der eine Eingabe stattfindet (die dann in einem try / catch behandelt würde). Eine EIngegebene Zahl würde per if geprüft, die Ausgabe kommt u.s.w. Am Ende würde dann geprüft, ob die Zahl erraten wurde und wenn nicht, dann geht die Schleife halt weiter. Bei so einem Aufbau könnte es sogar sinnvoll sein, viel mehr in den try Block aufzunehmen, so dass Prüfungen / Ausgaben nicht stattfinden, wenn eine Exception geworfen wurde.
Das ist in so fern wichtig, als dass ich nicht sage: Das geht nicht anders. Ich biete nur einen Best Practice an, um eben wirklich schnell und problemlos etwas entwickeln zu können ohne sich unnötig lange einen COde anzusehen um sich so "Optimierungen" zu überlegen.


Ein wichtigeer Punkt ist noch nicht angesprochen worden, aber Du wirst bestimmt noch darauf stoßen: Verhalten vom Scanner:
Der Scanner kann Zeilenorientiert oder Token-basiert arbeiten. Bei nextInt wird ein Token gelesen und ausgewertet. Wenn dieses Token keine Zahl ist, dann verbleibt es in der Eingabe. Also wenn "Hugo" eingegeben wurde, dann ist Hugo weiter in der Eingabe auch nach einem nextInt() Aufruf. Hugo muss also entfernt werden und dazu kann man z.B. dieses Token "Hugo" mittels next() auslesen oder man liest die ganze Eingabe bis zum Enter mittels nextLine(). Das wäre also nach der InputMismatchException eine Art Bereinigung vom Scanner.
 

triade

Aktives Mitglied
Jetzt doch noch einmal statt vom Smartphone eine ausführliche Antwort vom Computer aus.

Divide and Conquer
Der Grundsatz Teile und Herrsche ist mit einer der wichtigsten Grundsätze in der Informatik. Komplexe Probleme werden unterteilt in kleiner Probleme und so gelöst. Das zieht sich quer durch wirklich alle Bereiche. Dabei ist ein wichtiger Teilpunkt, das Code übersichtlich bleibt. Das ist etwas, das selbst in der professionellen Software-Entwicklung von den Entwicklern gemacht wird und da wäre es kein Thema, so Code relativ schnell zu überblicken. Aber man muss halt schon genauer hin schauen, dabei kann man leicht etwas übersehen, daher: Auch als Senior Software Engineer hält man sich an sowas.

Das ist aber nur reine Theorie. Wie kommt man denn dahin? Und da bevorzuge ich immer eine strukturierte Herangehensweise:
1. genaues Verständnis der Abläufe. (Das schimpfen wir dann gerne fachliche Abhängigkeiten oder so) Was soll genau passieren? Wie soll das System sich verhalten. Das wird nieder geschrieben und zwar nicht in Code sondern in Worten. Das kann erst einmal in Form von Anforderungen sein, aber vor der Implementierung wird auch die Logik festgelegt.
Damit hat man dann eine Übersicht des Ablaufs. Das kann bei Dir sein:
  • Abfrage einer Zahl
  • Wenn die Zahl nicht die gesuchte Zahl ist: Tipp geben und weiter beim ersten Punkt
  • Sonst gratulieren zu gefundener Zahl und Ende.

Das kann so grob bezeichnet werden. Jetzt ist es aber nicht unüblich, dass ein Punkt zu komplex ist. "Abfrage einer Zahl" wird hier noch komplexer. Also wird das noch weiter beschrieben:

Abfragen einer Zahl:
  • User auffordern, eine Zahl einzugeben
  • Wert einlesen
  • Wenn Wert keine Zahl ist, dann beim Anfang starten.
  • Wert/Zahl zurück geben

Man erkennt, dass man hier eine saubere Strukturierung hat.

2. Wenn man diese Strukturierung hat, dann kann man das implementieren. Und das geht - so die Beschreibung ausreichend war - 1:1:
Aus "Abfragen einer Zahl" wird dann einfach ein Methodenaufruf: frageZahlAb()

Was gewinnt man dadurch: Man hat kleine Dinge, die man leicht überblicken kann. Die Methode frageZahlAb() hat dann am Anfang nur den nextInt() Aufruf. Dann ist klar: Nur der wird in ein try / catch gepackt. und man muss da nur diesen Bereich betrachten.
Und man hat Dinge, die leichter mehrfach verwendet werden können. In Deinem Code hast zwei so Abfragen - das wäre also dann einfach zwei mal so ein Methodenaufruf.

Das muss man aber so nicht machen. Man kann da auch anders heran gehen. Das wäre dann ein rein praktischer Weg durch ein Doing. Das ist eine Alternative zu der strukturierten Herangehensweise zu der ich eigentlich immer rate.

Du hast einen ersten Code geschrieben, der vermutlich etwas in der Art sein dürfte:
Java:
import java.util.Scanner;
import java.util.InputMismatchException;

public class Aufgabe4
{
    public static void main (String[] args)
    {
        Scanner zeta = new Scanner(System.in);

        int min = 1;
        int max =15;
        int z =(int)(Math.random() * ((max-min)))+min;
     
        System.out.println("Raten sie eine Zahl zwichen 1-15, sie haben 5 versuche.");

        int ez = zeta.nextInt();
       
        while(ez!=z)
        {
            System.out.println("Die von Ihnen eratene Zahl in nicht die Zufallszahl.");
            if(ez>z)
            {
                System.out.println("Sie liegen oben drer.");
            }
            else
            {
                System.out.println("Sie liegen unten drunter.");
            }
            System.out.println("Versuchen sie es ernuert.");
            ez = zeta.nextInt();
        }
        System.out.println("Sie haben die zufällige Zahl "+z+" eraten.");  
    }
}
Das konnte man testen und heya - geht ganz gut. Nur wenn man mal keine Zahl eingibt sondern Hugo oder Hallo, dann kommt die Exception. Also will man die falschen Eingaben behandeln.

Hier muss man dann schauen: Wo ist etwas anzupassen? Und das sind dann hier die beiden zeta.nextInt(); Aufrufe. Also gehst Du hin und behandelst nur diese! Also wirklich das try / catch so klein wie möglich halten!
Und dann kannst Du da bauen, was Du für richtig erachtest.

In Deinem Fall wirst Du den Code aber dann wirklich 1:1 an zwei Stellen haben. In so einem Fall findet dann ein sogenanntes Refactoring statt: Der doppelte Code wird in eine Methode gezogen.
==> Also auch über diesen Weg kommen wir zu einem Aufbau, der vergleichbar ist mit dem strukturierten Ansatz.

Hier wäre dann sowas wie eine goldene Regel: Halte try/catch Blöcke so klein wie möglich. Klar, es kann sich dann heraus stellen: Hey, direkt danach kommt gleich die nächste Exception. Die gehört da mit rein. Dann macht man das. Aber die Kernidee ist dann, dass man erweitert. Man packt nicht direkt alles in ein try / catch. (Das einfach als eine Art Best Practice betrachten).


An der Stelle möchte ich nicht verschweigen, dass man natürlich auch viel direkt im Code machen kann ohne weitere Unterteilung. So wäre natüröich denkbar, durch eine do while Schleife nur eine Stelle zu haben, bei der eine Eingabe stattfindet (die dann in einem try / catch behandelt würde). Eine EIngegebene Zahl würde per if geprüft, die Ausgabe kommt u.s.w. Am Ende würde dann geprüft, ob die Zahl erraten wurde und wenn nicht, dann geht die Schleife halt weiter. Bei so einem Aufbau könnte es sogar sinnvoll sein, viel mehr in den try Block aufzunehmen, so dass Prüfungen / Ausgaben nicht stattfinden, wenn eine Exception geworfen wurde.
Das ist in so fern wichtig, als dass ich nicht sage: Das geht nicht anders. Ich biete nur einen Best Practice an, um eben wirklich schnell und problemlos etwas entwickeln zu können ohne sich unnötig lange einen COde anzusehen um sich so "Optimierungen" zu überlegen.


Ein wichtigeer Punkt ist noch nicht angesprochen worden, aber Du wirst bestimmt noch darauf stoßen: Verhalten vom Scanner:
Der Scanner kann Zeilenorientiert oder Token-basiert arbeiten. Bei nextInt wird ein Token gelesen und ausgewertet. Wenn dieses Token keine Zahl ist, dann verbleibt es in der Eingabe. Also wenn "Hugo" eingegeben wurde, dann ist Hugo weiter in der Eingabe auch nach einem nextInt() Aufruf. Hugo muss also entfernt werden und dazu kann man z.B. dieses Token "Hugo" mittels next() auslesen oder man liest die ganze Eingabe bis zum Enter mittels nextLine(). Das wäre also nach der InputMismatchException eine Art Bereinigung vom Scanner.
Erstmal vielen dank dir für diese ausführliche Erklärung und die Zeit die du da rein getan hast.
Der Code an sich "funktioniert" jetzt, also er fordert einen wie gewünscht nach einer Zahl, sagt einen ob man diese hat oder gibt einen einen tipp und reagiert auch bei einer falschen Eingabe statt mit der Fehlermeldung mit einen gewünschten Text.
Wenn Wert keine Zahl ist, dann beim Anfang starten.
Eine frage die mir auch schon im Kopf kam undzwar zurzeit beendet sich der Code selber sobald eine ungültige Eingabe kommt kann ich das mit einem repeat im catch so machen das er nach dem er den warntext, wegen der Falschen eingabe, ausgibt er wieder das was im try ist versucht. Falls ja wie würde das gehen denn repeat hatten wir noch nicht und ich habe mich zwar kurz eingelesen allerdings wie man einen try wiederholt dazu fand ich nichts.

Vielen dank fürs drauf aufmerksam machen das man try/catch so kurz wie möglich halten sollte, ich versuche mal das als Methode zu verpacken und es dann so zu nutzen, die sache zu Methoden ist das wir es ebenfalls nicht in der Schule bis jetzt haben aber etwas weiß ich schon darüber hoffe mal das genügt falls nicht würde ich mich dann nochmal hier an die runde wenden.
 

KonradN

Super-Moderator
Mitarbeiter
Eine frage die mir auch schon im Kopf kam undzwar zurzeit beendet sich der Code selber sobald eine ungültige Eingabe kommt kann ich das mit einem repeat im catch so machen das er nach dem er den warntext, wegen der Falschen eingabe, ausgibt er wieder das was im try ist versucht. Falls ja wie würde das gehen denn repeat hatten wir noch nicht und ich habe mich zwar kurz eingelesen allerdings wie man einen try wiederholt dazu fand ich nichts.
Du packst es einfach in eine Schleife. Das kann in einer Methode dann so aussehen:
Java:
public final static Scanner inputScanner = new Scanner (System.in);

int getIntFromUser() {
    while (true) {
        try {
            int number = inputScanner.nextInt();
            return number;
        } catch (InputMismatchException e) {
            String wrongInput = inputScanner.next();
            System.out.println("Das (" + wrongInput + ") war keine ganze Zahl. Bitte versuche es noch einmal:");
        }
    }
}

Dabei beachten:

a) Der verwendete Scanner ist nun eine statische Variable, so dass wir diese von überall nutzen können. Und auch wenn diese Variable staic final ist, habe ich diese nicht in der Schreibweise einer Konstante (INPUT_SCANNER wäre das ja) geschrieben, denn es hat einen ständig wechselnden State. Das wird damit etwas deutlich.

b) im try-Block könnte man es einfach auf eine Zeile schreiben: return inputScanner.nextInt(); Ich habe es nur aufgeteilt, weil es so für Dich evtl. leichter zu lesen ist.

c) Das inputScanner.next() ist wichtig zur Bereinigung. Das wirklich einmal ausprobieren! Also einfach nur ein System.out.println("Das war keine ganze Zahl, bitte erneut versuchen:"); in den catch-Block packen und schauen, was passiert!
 

triade

Aktives Mitglied
catch (InputMismatchException e) { String wrongInput = inputScanner.next(); System.out.println("Das (" + wrongInput + ") war keine ganze Zahl. Bitte versuche es noch einmal:");
Vielen dank erstmal der code funktioniert soweit und try und catch ist durch die Methode nicht überfüllt. Allerdings ist bei catch das Problem das die ungültige eingabe 2 mal getätigt werden muss damit die Ausgabe Lauten kann: "Das (" + wrongInput + ") war keine ganze Zahl. Bitte versuche es noch einmal." so wie ich es checke erst wenn einmal die falsche Eingabe getätigt habe wird das gemacht was in catch ist und erst dann die eingabe einen sting zugeordnet und das wird der warntext hinzugefügt, hast du vllt ne Idee wie ich die falsche eingabe direkt dahib tun kann?
Falls nicht es klappt ja das ein warntext das die eingabe ungültig ist, ausgegeben wird. :)
 

KonradN

Super-Moderator
Mitarbeiter
Dann zeige bitte noch einmal genau Deinen Code. Du musst dann irgend etwas anders gemacht haben, damit es sich nicht richtig verhält.

Da ich es direkt in der main aufrufen möchte, habe ich die Methode noch static gemacht:
Java:
import java.util.InputMismatchException;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        getIntFromUser();
    }

    public final static Scanner inputScanner = new Scanner (System.in);

    static int getIntFromUser() {
        while (true) {
            try {
                int number = inputScanner.nextInt();
                return number;
            } catch (InputMismatchException e) {
                String wrongInput = inputScanner.next();
                System.out.println("Das (" + wrongInput + ") war keine ganze Zahl. Bitte versuche es noch einmal:");
            }
        }
    }
}

Und einmal was falsches angegeben und es wird richtig angezeigt: Ausgabe des Programmes - erste Eingabe aaa dann komt direkt die Meldung und dann erfolgt die Eingabe von 123 die dann akzeptiert wird und das Programm endet da dann weil ja nicht mehr wie der einmalige Aufruf in der main steht:

Code:
aaa
Das (aaa) war keine ganze Zahl. Bitte versuche es noch einmal:
123

Process finished with exit code 0
 

triade

Aktives Mitglied
Dann zeige bitte noch einmal genau Deinen Code.
Ich habe halt das try/catch oben und eben in dem try die Methode.
Mein code:

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

public class AUFGABEE4
{
    public static void main (String[] args)
    {
        System.out.println("Raten sie eine Zahl zwichen 1-15, empfohlen sind max. 5 versuche.");
        
        while(true)
        {
            try
            {
                frageZahlAb();
            }
            catch(InputMismatchException e)
            {
                //System.out.println("Die eingabe  ist keine gültige Eingabe. Bitte versuche es noch einmal:");
                String fi = zeta.next();
                System.out.println("Die eingabe (" + fi + ") ist keine gültige Eingabe. Bitte versuche es noch einmal:");
            }
        }
      
        
        
    }
    public final static Scanner zeta = new Scanner (System.in);

    public static void frageZahlAb()
    {   
        Scanner zeta = new Scanner(System.in);   
        int min = 1;
        int max =15;
        int z =(int)(Math.random() * ((max-min)))+min;

        int vz = 1;
        int ez = zeta.nextInt();
        while(ez!=z )
        {
            System.out.println("Die von Ihnen eratene Zahl " + ez + " in nicht die Zufallszahl.");
            if(ez>z )
            {
                if(vz % 5 == 0)
                {
                    System.out.println("Sie haben schon " +vz+ " versuche benötigt.");
                    if(vz!=5 && vz % 5 == 0)
                    {
                        System.out.println("Geben sie gas!");
                    }
                }
                System.out.println("Sie liegen oben drüber.");
            }
            else
            { 
                if(vz % 5 == 0)
                {
                    System.out.println("Sie haben schon " +vz+ " versuche benötigt.");
                    if(vz!=5 && vz % 5 == 0)
                    {
                        System.out.println("Geben sie gas!");
                    }
                }
                System.out.println("Sie liegen unten drunter.");   
            }
            System.out.println("Versuchen sie es ernuert.");
                
            vz++;
            ez = zeta.nextInt(); 
        }   
        if(ez==z)
        {
            System.out.println("Sie haben die zufällige Zahl "+z+" eraten."); 
        }
        
    }
}
 

KonradN

Super-Moderator
Mitarbeiter
Das ist auch nicht, wie es gedacht war. Die Methode getIntFromUser sollte schon so eine Methode sein. Und in Deinem Code solltest Du dann einfach diese Methode nutzen. Sprich da, wo Du bisher mit nextInt die Zahl abfragst, würdest Du die Methode aufrufen.

Und dann noch ein Hinweis:
Den Code
Java:
              if(vz % 5 == 0)
                {
                    System.out.println("Sie haben schon " +vz+ " versuche benötigt.");
                    if(vz!=5 && vz % 5 == 0)
                    {
                        System.out.println("Geben sie gas!");
                    }
                }

führst du im if und auch im else Block aus. Daher wird er immer ausgeführt. Daher kannst Du ihn einfach vor das if schieben:
Java:
            if(vz % 5 == 0)
            {
                System.out.println("Sie haben schon " +vz+ " versuche benötigt.");
                if(vz!=5 && vz % 5 == 0)
                {
                    System.out.println("Geben sie gas!");
                }
            }

            if(ez>z )
            {
                System.out.println("Sie liegen oben drüber.");
            }
            else
            {
                System.out.println("Sie liegen unten drunter.");   
            }
==> Vermeidung von doppeltem Code!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V InputMismatchException (Try and catch) Java Basics - Anfänger-Themen 10
missy72 Catch Blöcke zusammenfassen Java Basics - Anfänger-Themen 6
Ostkreuz wie geht der catch? Java Basics - Anfänger-Themen 3
D try/catch-Block bei for-Schleife Java Basics - Anfänger-Themen 14
D Best Practice Ausgabe über direkte Ausgabe oder try-catch? Java Basics - Anfänger-Themen 13
districon Try - Catch Java Basics - Anfänger-Themen 8
JavaNoobi Try and Catch und übergabe von Objekten Java Basics - Anfänger-Themen 2
Y Wie kann ich die Variable in der Try Catch returnen? Java Basics - Anfänger-Themen 3
B Try-Catch Block Java Basics - Anfänger-Themen 3
B JUnit / Exceptions/ try-catch Java Basics - Anfänger-Themen 6
B try catch finally Java Basics - Anfänger-Themen 2
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
H throws und try catch Java Basics - Anfänger-Themen 8
H Try Catch Throw Exception Java Basics - Anfänger-Themen 1
S Try-Catch in Verwendung einer while Schleife Java Basics - Anfänger-Themen 2
I Try-Catch innerhalb eines Catchblocks Java Basics - Anfänger-Themen 1
J Endlosschleife bei Try-Catch? Java Basics - Anfänger-Themen 3
K JOptionPane/catch/try/finally/if Java Basics - Anfänger-Themen 9
L do-while-Schleife läuft doppelt, try catch fehler Java Basics - Anfänger-Themen 12
J Erste Schritte catch Exeption Parameter Java Basics - Anfänger-Themen 7
TheMenox Try and Catch Java Basics - Anfänger-Themen 12
J Try Catch Java Basics - Anfänger-Themen 6
DeVolt Java8 Paket Time: Datum prüfen / try-catch Java Basics - Anfänger-Themen 1
J Code in Try-Catch Block wird nicht komplett ausgeführt Java Basics - Anfänger-Themen 5
J Frage zum Thema Exceptions (Try/Catch) Java Basics - Anfänger-Themen 3
A Nicht zu findender Fehler in einem try/catch Block Java Basics - Anfänger-Themen 6
F try/catch Ausführungen ? Java Basics - Anfänger-Themen 3
S try-catch - Variablen werden nicht an return übergeben Java Basics - Anfänger-Themen 3
Z Catch & Exceptions Java Basics - Anfänger-Themen 4
I Exception try-catch Java Basics - Anfänger-Themen 1
E Buchstaben verhindern / Try & Catch Block Java Basics - Anfänger-Themen 3
F try/catch - (else) Java Basics - Anfänger-Themen 11
L Warum ist der catch-Block nicht erreichbar ? Java Basics - Anfänger-Themen 8
C Problem mit try-catch in Schleife Java Basics - Anfänger-Themen 15
R Exceptions (try/catch) Java Basics - Anfänger-Themen 63
H Geht dieser Code noch einfacher (try catch finally) Java Basics - Anfänger-Themen 7
J Methoden try / catch exception Java Basics - Anfänger-Themen 5
S 'continue' in catch- und if-blöcken Java Basics - Anfänger-Themen 2
B Erste Schritte try-catch-Klauseln, überprüfte Ausnahmen Java Basics - Anfänger-Themen 4
D Erste Schritte Warum try-catch für FileWriter Java Basics - Anfänger-Themen 5
S try-catch-finally-Problem Java Basics - Anfänger-Themen 10
xehpuk Compiler-Fehler final Variable in try-catch Wert zuweisen Java Basics - Anfänger-Themen 8
F Exceptionbehandlung --> catch/throws Java Basics - Anfänger-Themen 11
M Try und Catch Java Basics - Anfänger-Themen 5
B Fehler mit try + catch verhindern Java Basics - Anfänger-Themen 8
N Catch Block in Try erzwingen Java Basics - Anfänger-Themen 14
E Problem mit for schleife/ try-catch block Java Basics - Anfänger-Themen 7
B Variablen Variablen in try / catch "public" machen? Java Basics - Anfänger-Themen 3
C Wiederholung von try-catch Java Basics - Anfänger-Themen 3
N try and catch block in finally Java Basics - Anfänger-Themen 8
M exception catch falsch? Java Basics - Anfänger-Themen 11
S catch Exception erklären Java Basics - Anfänger-Themen 2
C Variable in try/catch Java Basics - Anfänger-Themen 10
B Try and Catch Java Basics - Anfänger-Themen 6
StrikeTom Ein paar(2) Fragen zu throws und try + catch Java Basics - Anfänger-Themen 6
J try und catch Java Basics - Anfänger-Themen 7
G Exceptionfreie Anweisungen in try-catch-Blöcke, Java Basics - Anfänger-Themen 6
B Exception vor catch Block definieren Java Basics - Anfänger-Themen 9
M Frage zu try ... catch Java Basics - Anfänger-Themen 9
S NumberFormatException , mit Try/Catch? Java Basics - Anfänger-Themen 7
B Try/catch Java Basics - Anfänger-Themen 11
M Try & Catch Java Basics - Anfänger-Themen 7
V Was ist ein Try-Catch Block Java Basics - Anfänger-Themen 4
M Nach catch mit der schleife weitermachen Java Basics - Anfänger-Themen 9
M try-catch, call-by-reference, Streaming und Strings Java Basics - Anfänger-Themen 10
S sauberer Stil von return Wert (try, catch, finally) Java Basics - Anfänger-Themen 9
S try-catch Java Basics - Anfänger-Themen 10
Tandibur Server führt "try-catch" nicht aus Java Basics - Anfänger-Themen 6
H Falsche Eingabe über try-catch abfangen Java Basics - Anfänger-Themen 2
I Frage zu Try - Catch - Finally Java Basics - Anfänger-Themen 10
Daniel_L Verwendung von try und catch bei exceptions Java Basics - Anfänger-Themen 7
GambaJo Wann try.catch nutzen? Java Basics - Anfänger-Themen 11
H try catch Java Basics - Anfänger-Themen 4
I double-Variable außerhalb des Try-Catch-Blocks nicht gültig Java Basics - Anfänger-Themen 2
D Catch wiederholt sich ständig Java Basics - Anfänger-Themen 2
T try-catch-finally Java Basics - Anfänger-Themen 8
G Anwendung von try-catch Java Basics - Anfänger-Themen 10
G try. catch Verwendung Java Basics - Anfänger-Themen 11
M Try-Catch-Problem Java Basics - Anfänger-Themen 4
G habe ein Catch problem Java Basics - Anfänger-Themen 7
C Nach Catch-Klausel Programm weiter laufen lassen Java Basics - Anfänger-Themen 5
B try & catch Problem mit Exception bzw String.split() Java Basics - Anfänger-Themen 5
C Frage zu try - catch (saubere Lösung?) Java Basics - Anfänger-Themen 3
G Bei catch beenden Java Basics - Anfänger-Themen 7
U catch mit finally Java Basics - Anfänger-Themen 5
C Exceptions, try, catch --> Frage Java Basics - Anfänger-Themen 7
J Try-Catch-Frage Java Basics - Anfänger-Themen 13
B catch exception funktioniert nicht! Java Basics - Anfänger-Themen 14
D Frage try and catch Java Basics - Anfänger-Themen 7
ven000m try catch - was muss bei catch rein Java Basics - Anfänger-Themen 28
G Datenbank - catch Java Basics - Anfänger-Themen 2
H Konstruktor in Methode fremder Klasse: try-catch-Problem Java Basics - Anfänger-Themen 4
M return und try-catch Java Basics - Anfänger-Themen 6
M Try . catch erzwungen? Java Basics - Anfänger-Themen 11
F eigene Exception aus try-catch werfen Java Basics - Anfänger-Themen 10
A Syntaxproblem mit try und catch Java Basics - Anfänger-Themen 3
Silver-Blue fragen zu Swing und catch Exceptions Java Basics - Anfänger-Themen 2
G return fehler bei try catch Java Basics - Anfänger-Themen 8
H try und catch Java Basics - Anfänger-Themen 6
A try catch UNREACHABLE CODE Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben