Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » Java, Exception und Schleife
Druckversion
Druckversion
Antworten
Antworten
Autor
Universität/Hochschule Java, Exception und Schleife
JamesNguyen
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 08.11.2020
Mitteilungen: 115
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2020-11-21


Hallo Leute,

mein erste Frage im Info-Forum

ich kopier einfach mal meine code von der meiner Main-funktion in Intellij rein:

Es soll eine Zufallszahl vom User erraten werden
Funktionieren tut gerade noch nicht die Exception wenn ich bspw.
ein Wort eingebe
dann kommt

ununterbrochen als Ausgabe
Not a number - Try again!
Please enter your guess:
Not a number - Try again!
Please enter your guess:
Not a number - Try again!
...

Vielen Dank,
James Nguyen


Code:
public static void main(String[] args) {
        Random random = new Random();

        Scanner scanner = new Scanner(System.in);

        System.out.println("Welcome!");

        int zufallsGanzzahl;

        int eingabeZahl;

        do {
            zufallsGanzzahl = random.nextInt(1000) + 1;

            eingabeZahl = 0;

            do {
                System.out.println("Please enter your guess:");

                try {
                    eingabeZahl = scanner.nextInt();

                    if(eingabeZahl > zufallsGanzzahl) {
                        System.out.println("Too big!");
                    } else if(eingabeZahl < zufallsGanzzahl) {
                        System.out.println("Too small!");
                    } else {
                        System.out.println("You win!");
                    }
                } catch (InputMismatchException ime) {
                    System.out.println("Not a number - Try again!");
                }
            } while(eingabeZahl != zufallsGanzzahl);

            System.out.println("Play another round? [y/N]");
        } while((scanner.next()).equals("y"));
    }



Wahlurne Für JamesNguyen bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
JamesNguyen
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 08.11.2020
Mitteilungen: 115
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, vom Themenstarter, eingetragen 2020-11-21





Wahlurne Für JamesNguyen bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
JamesNguyen
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 08.11.2020
Mitteilungen: 115
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, vom Themenstarter, eingetragen 2020-11-21


ok ich habe jetzt
nach

                } catch (InputMismatchException ime) {
                    System.out.println("Not a number - Try again!");
                    scanner.nextLine();
                }

ergänzt

jetzt gehts



Wahlurne Für JamesNguyen bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
JamesNguyen
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 08.11.2020
Mitteilungen: 115
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, vom Themenstarter, eingetragen 2020-11-21


kann mir jemand erklären warum es jetzt klappt und vorher nicht?



Wahlurne Für JamesNguyen bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2596
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, eingetragen 2020-11-21


Scanner.nextInt() liest nur passende Token.
Ist das nächste Token allerdings keine Ganzzahl, so passiert nichts und die nächste Schleife führt zum gleichen Fehler.

Mit nextLine() lässt du den Scanner die fehlerhafte Eingabe hingegen überspringen und gibst ihm die Möglichkeit, Fortschritt zu erzielen.



PS.: Es ist leichter, Programmcode zu lesen und überprüfen wenn man ihn in der Quelltextumgebung postet.
Java
public static void main(String[] args) {
        Random random = new Random();
 
        Scanner scanner = new Scanner(System.in);
 
        System.out.println("Welcome!");
 
        int zufallsGanzzahl;
 
        int eingabeZahl;
 
        do {
            zufallsGanzzahl = random.nextInt(1000) + 1;
 
            eingabeZahl = 0;
 
            do {
                System.out.println("Please enter your guess:");
 
                try {
                    eingabeZahl = scanner.nextInt();
 
                    if(eingabeZahl > zufallsGanzzahl) {
                        System.out.println("Too big!");
                    } else if(eingabeZahl < zufallsGanzzahl) {
                        System.out.println("Too small!");
                    } else {
                        System.out.println("You win!");
                    }
                } catch (InputMismatchException ime) {
                    System.out.println("Not a number - Try again!");
                }
            } while(eingabeZahl != zufallsGanzzahl);
 
            System.out.println("Play another round? [y/N]");
        } while((scanner.next()).equals("y"));
    }
 



-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Wahlurne Für DerEinfaeltige bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
tactac
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 15.10.2014
Mitteilungen: 1935
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, eingetragen 2020-11-21


Die Dokumentation enthält die gewünschte Information.
Die Methode nextInt überliest im Fehlerfall den anliegenden Input nicht. Man könnte also, falls das Lesen eines ints fehlschlägt, etwas anderes zu lesen versuchen.
nextLine liest den Input bis hinter einen Zeilenumbruch.

[Die Antwort wurde nach Beitrag No.3 begonnen.]



Wahlurne Für tactac bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
JamesNguyen hat die Antworten auf ihre/seine Frage gesehen.
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]