Kein Scanner Fehler durch falsche EIngabe

MaxgQ

Mitglied
Hallo in meinem TicTacToe Spiel wird der Spieler aufgefordert in der Konsole eine Zahl zwischen 1-9 auszuwählen. Damit er sein gewünschtes Spielfeld auswählen kann. Doch wenn man nun ein Buchstabe in die Konsole eingibt, anstatt eine Zahl, dann stürzt das Programm immer ab. Mit was für einem Code kann ich dieses Problem beheben.
 
K

kneitzel

Gast
Der Scanner wirf eine Exception und diese Exception kannst Du mit try / catch fangen.

Die fehlerhafte Ausgabe musst Du dann aber noch aus dem Scanner Buffer entfernen. Dazu kannst Du z.B. nextLine() aufrufen.

Damit hast Du alles, was Du machen musst.

Also skizziert könntest Du eine Methode schreiben, die so aussieht:

Eingabe-Methode:
Schleife:
- try
- - Frage nach der Eingabe
- - Wenn Eingabe gültig: gib Eingabe zurück
- catch Exception von fehlerhafter Eingabe
- Gib Fehlermeldung aus: Eingabe ungültig.
Ende Schleife

Die Endlosschleife wird nur durch eine gültige Eingabe abgebrochen (durch ein Return). Wenn eine Exception auftritt oder die Eingabe ungültig ist (Also z.B. nicht im Bereich von 1...9), dann wird eine Fehlermeldung ausgegeben und die Schleife beginnt von Anfang an.
 

MaxgQ

Mitglied
Könnten Sie sich kurz meinen Code ansehen. Ich weis nicht wie ich es tun muss.

import java.util.Scanner;

public class HumanPlayer {
static Scanner input = new Scanner(System.in);

public static void playerMove(char[][] gameBoard) {

System.out.println("Wähle ein Feld 1-9");

int move = input.nextInt();

boolean result = Game.validMove(move, gameBoard);

while (!result) {
Sound.errorSound(gameBoard);
System.out.println("Feld ist besetzt!");
move = input.nextInt();
result = Game.validMove(move, gameBoard);
}

System.out.println("Spieler hat diesen Zug gespielt " + move);
Game.placePiece(move, 1, gameBoard);
}

}
 
K

kneitzel

Gast
Dein Problem entsteht doch in den zwei Zeilen mit:
move = input.nextInt();

input.nextInt() kann eine Exception werfen oder die Zahl kann im falschen Bereich sein. Das ist also doof. Also müssen wir dies ändern.

Aber statt den Code auf zu blähen an der Stelle, schreiben wir einfach eine neue Methode:
move = getFieldInput(input);
bzw (da input ja eine Klassenvariable ist):
move = getFieldInput();

Den Namen der Methode kannst Du Dir noch frei überlegen. Sollte halt verständlich sein, was die Methode macht wenn man den Namen der Methode liest.

Und in die Methode kannst Du dann das schreiben, was ich schon beschrieben habe:
Eingabe-Methode:
Schleife:
- try
- - Frage nach der Eingabe
- - Wenn Eingabe gültig: gib Eingabe zurück
- catch Exception von fehlerhafter Eingabe
- Gib Fehlermeldung aus: Eingabe ungültig.
Ende Schleife
Java:
public static int getFieldInput() {
    while (true) {
        try {
            int field = input.nextInt();
            if (field >= 1 && field <= 9) return field;           
        } catch (InputMismatchException ex) {
            input.nextLine(); // Scanner-Puffer von zeichen befreien.
        }
        System.out.println("Ihre Eingabe war nicht korrekt! Bitte geben sie erneut eine Feldnummer ein:")
    }
}

In dem catch Block ist dann halt noch die Bereinigung vom Scanner - das hatte ich ja auch schon angedeutet:
Die fehlerhafte Ausgabe musst Du dann aber noch aus dem Scanner Buffer entfernen. Dazu kannst Du z.B. nextLine() aufrufen.
 

krgewb

Top Contributor
Bitte immer in Code-Tags posten.
Java:
import java.util.Scanner;

public class HumanPlayer {
    static Scanner input = new Scanner(System.in);

    public static void playerMove(char[][] gameBoard) {

        System.out.println("Wähle ein Feld 1-9");

        int move = input.nextInt();

        boolean result = Game.validMove(move, gameBoard);

        while (!result) {
            Sound.errorSound(gameBoard);
            System.out.println("Feld ist besetzt!");
            move = input.nextInt();
            result = Game.validMove(move, gameBoard);
        }

        System.out.println("Spieler hat diesen Zug gespielt " + move);
        Game.placePiece(move, 1, gameBoard);
    }

}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Scanner.hasNext findet kein Ende Allgemeine Java-Themen 6
Zrebna SonarLint: Warum kein Null-Referencing-CodeSmell-Hint hier? Allgemeine Java-Themen 23
I OpenPDF (ehem. iText) will kein PDF mit CMYK only erzeugen Allgemeine Java-Themen 6
A Kein Online-Zugang mögl.! Allgemeine Java-Themen 4
D kein Versand von Mails mit Anhang mehr Allgemeine Java-Themen 2
D Best Practice Gesamten Bildschirminhalt auslesen und Email schicken sobald kein Pixel sich ändert Allgemeine Java-Themen 11
R Warum kein throw? Allgemeine Java-Themen 3
W String Parsen und auf eigenes Muster anwenden (kein Regex) Allgemeine Java-Themen 11
A Datentypen Long.valueOf liefert kein "L" am Ende Allgemeine Java-Themen 3
M Kein Zugriff auf microSD Karten Allgemeine Java-Themen 4
B Input/Output Server Startet, Jedoch Kein Output. Allgemeine Java-Themen 1
B NullPointerException - Aber kein Fehler im Code Allgemeine Java-Themen 4
T JNI: kein Zugriff auf VM in Callback-Methode eines Windows-Hooks Allgemeine Java-Themen 3
Guybrush Threepwood Kein user.home unter Windows8 Allgemeine Java-Themen 7
127.0.0.1 SQL Exception, kein Driver Allgemeine Java-Themen 9
Z Concurrent Modification Exception - HashMap (kein remove) Allgemeine Java-Themen 4
D Eclipse Kein Zugriff auf Inhalt einer referenzierten .jar Allgemeine Java-Themen 5
S Schnell eine fortlaufende nummer erzeugen SQL, kein Primkey Allgemeine Java-Themen 8
P Mail wird nicht gesendet - Muss ich kein PW angeben ? Allgemeine Java-Themen 13
G RegEx kein Unterstrich Allgemeine Java-Themen 2
E kein doppelter Programmaufruf Allgemeine Java-Themen 3
reibi Workspace schon geöffnet (Kein Eclipse Thema) Allgemeine Java-Themen 14
D Kein Zugriff auf WebService ausser localhost Allgemeine Java-Themen 4
H Bestimmten String mit Pattern und Matcher herauslesen => kein erfolg Allgemeine Java-Themen 9
Haave Audio Device Unavailable: Kein gleichzeitiger Zugriff auf Soundsystem möglich Allgemeine Java-Themen 7
Z Boolean Abfrage gibt kein Boolean zurück, aber warum? Allgemeine Java-Themen 6
T GregorianCalendar - kein Februar Allgemeine Java-Themen 6
0 kein Java unter Server 2008 ? Allgemeine Java-Themen 3
I kann JAVA kein Mathe? Allgemeine Java-Themen 10
J Kein Zugriff auf Klassen im Default Package Allgemeine Java-Themen 8
F Threading oder kein Threading - das ist hier die Frage. Allgemeine Java-Themen 23
V FileWriter und Zahlen (Kein Problem, nur Verständnisfrage) Allgemeine Java-Themen 4
T Problem, warum macht der das so(finde kein titel.) Allgemeine Java-Themen 3
K Kein schließendes Tag bei leerem Element mit JDOM Allgemeine Java-Themen 8
D Ich ikann kein Java-Programm starten Allgemeine Java-Themen 10
B Ausführungsproblem: admin, kein admin Allgemeine Java-Themen 2
E Warum kein Import? Allgemeine Java-Themen 3
L Kein Ausführen möglich Allgemeine Java-Themen 3
A Kein finally ausführen trotz verlassen des try blocks? Allgemeine Java-Themen 14
egrath Anonyme Methode - warum hier kein Compilerfehler Allgemeine Java-Themen 2
D kann kein java installieren Allgemeine Java-Themen 2
S Kein Sound in Java Applets unter Win 9x Allgemeine Java-Themen 4
P kein sound bei freenet spielen Allgemeine Java-Themen 2
K Problem mit Vererbung - Kein wirklicher Nutzen. Allgemeine Java-Themen 10
Redfrettchen addAll verwendet kein Iterator? Allgemeine Java-Themen 8
P Eclipse: Kein Fehler beim Debuging aber beim normalen run Allgemeine Java-Themen 3
T Feststellen ob kein extra Thread läuft Allgemeine Java-Themen 10
U Versions-Konfusion: Ist long kein object? Allgemeine Java-Themen 3
A Dateistatus abfragen und Datei löschen sobald kein Zugriff Allgemeine Java-Themen 7
M DOS-Shell kennt kein CP850!! Allgemeine Java-Themen 2
D Kein public Konstruktor Allgemeine Java-Themen 4
X Input/Output InputStream/Scanner(System.in) read()/hasNextLine() block unterbrechen Allgemeine Java-Themen 7
J Variablen Scanner als Klassenvariable Allgemeine Java-Themen 5
Bluedaishi Twain Scanner im Netzwerk Allgemeine Java-Themen 10
B Scanner erkennt keinen Text in Textdatei, obwohl welcher drinsteht Allgemeine Java-Themen 10
J Scanner oder BufferReader Allgemeine Java-Themen 2
1 Java Scanner Allgemeine Java-Themen 2
W Was genau sind IOTools? Kann ich stattdessen nicht die Scanner Klasse verwenden? Allgemeine Java-Themen 3
A Scanner Variable Klassenimtern deklarieren Allgemeine Java-Themen 12
T Datentypen Scanner Allgemeine Java-Themen 4
A Erste Schritte If Abfragen + Scanner Allgemeine Java-Themen 7
P Input/Output java.util.Scanner in einer Schleife und Exception-Behandlung: Einlesen einer Zahl Allgemeine Java-Themen 4
D Arraylist/For Schleife/Scanner Allgemeine Java-Themen 30
P Input/Output Datei einlesen per Scanner(f) - mit Cron gehts nicht Allgemeine Java-Themen 1
S Erste Schritte Scanner in Methode einbauen Allgemeine Java-Themen 4
B QR Scanner WebCam Allgemeine Java-Themen 2
P Scanner als Inputstream für Java Prozess Allgemeine Java-Themen 4
H Scanner: Ausgabe erst nach Abbruch Allgemeine Java-Themen 8
S Bekomme mit Scanner und URL keine Html-Seite ausgelesen Allgemeine Java-Themen 3
J NetBeans Frage bezüglich der Scanner-Klasse Allgemeine Java-Themen 6
H Scanner soll einen Inputredirect einlesen, liest aber nicht jedes Wort ein. Allgemeine Java-Themen 3
Ark Locale, Formatter und Scanner: Bug bei Gleitkommazahlen? Allgemeine Java-Themen 2
X Scanner hört nach der 25. Zeile auf Allgemeine Java-Themen 6
A Split, Scanner, StringTokenizer oder PatternMatching für flexibles Dateieinlesen? Allgemeine Java-Themen 2
D java.util.InputMismatchException im Scanner -wieso? Allgemeine Java-Themen 5
K Scanner - große Textfile, nur 0 ab betim. Wert Allgemeine Java-Themen 4
D Scanner leer aber bufferedReader nicht?! Allgemeine Java-Themen 2
N Scanner läuft nicht durch Allgemeine Java-Themen 2
R Scanner mit Java Allgemeine Java-Themen 2
J Parser / Scanner / Tokenizer gesucht Allgemeine Java-Themen 3
J Problem mit Scanner-Stream Allgemeine Java-Themen 2
J Mit Scanner-Klasse eine Datei zeilenweise einlesen und nur bestimmte Zeichen abfragen Allgemeine Java-Themen 11
M Scanner-Methode: Mehrere Eingaben mit Exception behandeln Allgemeine Java-Themen 10
R Barcode Scanner mit JavaPos ansprechen Allgemeine Java-Themen 1
M Barcode-Scanner unterscheidung zur Tastertur Allgemeine Java-Themen 7
H Problem mit Scanner Klasse Allgemeine Java-Themen 7
E Wie Zeichen eingeben mit Klasse Scanner? Allgemeine Java-Themen 5
D Problem mit java.util.scanner: Falsche Ergebnisse Allgemeine Java-Themen 4
E Scanner Frage :) Allgemeine Java-Themen 8
A Unterschied Scanner und Matcher Allgemeine Java-Themen 5
S Problem mit Scanner Allgemeine Java-Themen 5
G Barcode (Strichcode)-Scanner Allgemeine Java-Themen 10
G Scanner.hasNext() beendet den Thread ohne Message Allgemeine Java-Themen 4
S Scanner Allgemeine Java-Themen 6
G Scanner-Generator zur Erkennung von Java Tokens Allgemeine Java-Themen 7
B Try/Catch in While-Schleife mit Scanner - Hilfe! Allgemeine Java-Themen 3
D ProcessBuilder und Scanner Probleme mit einigen Prozessen Allgemeine Java-Themen 2
S Die Methode close() der Klasse Scanner Allgemeine Java-Themen 3
G Scanner und Abbruchbedingung/Pattern Allgemeine Java-Themen 2
bernd java.util.Scanner erst ab Java 1.5? Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben