Erste Schritte Scanner eingabe wird übersprungen

xant95

Mitglied
Hallo ich mache momentan den Kurs der Jetbrains Academy und mache ein TicTacToe Spiel..
-> Beispiel

Ich habe das Problem dass ich bei Zeile 11 nichts eingeben kann, er überspringt die eingabe aus irgendeinem Grund und macht mit der Schleife weiter.


Java:
public static void nextMove() {
    Scanner scanner = new Scanner(System.in);
    int row = 0;
    int col = 0;

    do {    // ENTER ROW
        try {   // CHECK INPUT TYPE
            System.out.println("Enter the coordinates: ");
            row = scanner.nextInt();
            col = scanner.nextInt();

            // INPUT OUT OF BOARD
            if (row > 3 || row < 1 || col > 3 || col < 1) {
                System.out.println("Coordinates should be from 1 to 3!");

                // CELL IS OCCUPIED
            } else if (board[row][col] == 'X' || board[row][col] == 'O') {
                System.out.println("This cell is occupied! Choose another one!");

            } else {
                return;
            }
        }catch (NoSuchElementException e) {
            System.err.println("You should enter numbers!");
        }
    } while (true);
}
 
Zuletzt bearbeitet:

Blender3D

Top Contributor
Ich habe das Problem dass ich bei Zeile 11 nichts eingeben kann, er überspringt die eingabe aus irgendeinem Grund und macht mit der Schleife weiter.
Probiere es so ..
Java:
import java.awt.Point;
import java.util.Scanner;

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

    public static void main(String[] args) {
        System.out.print(inputCoordinates(1, 3));
    }

    public static Point inputCoordinates(int min, int max) {
        Point pos = new Point();
        System.out.println("Enter the coordinates: ");
        pos.y = inputInt("Zeile", min, max);
        pos.x = inputInt("Spalte", min, max);
        return pos;
    }

    public static int inputInt(String label, int min, int max) {
        boolean ok = false;
        int value = 0;
        do {
            try {
                System.out.print(label + " >");
                value = Integer.parseInt(input.next());
                if (value < min || value > max)
                    System.out.println("Bitte nur Werte im Bereich von (" + min + "-" + max + ") eingeben!");
                else
                    ok = true;
            } catch (NumberFormatException e) {
                System.out.println("Bitte nur ganze Zahlen eingeben!");
            }
        } while (!ok);
        return value;
    }
}
 

KonradN

Super-Moderator
Mitarbeiter
Das Problem ist beim Scanner oft, dass verschiedene Eingabemöglichkeiten gemischt werden. Denn Scanner hat zwei Arten von Eingaben:

a) Tokenbasierte Eingaben
Bei Tokenbasierte Eingaben wird geschaut, ob es ein Token gibt, das abgefragt wird. Dazu werden erst alle Trennzeichen (per Default sind dann sogenannte Whitespace Zeichen, also Leerzeichen, Tab, Zeilenumbruch, ...) übersprungen. Und dann werden die Zeichen bis zu dem nächsten Trennzeichen betrachtet. Passen diese zu dem angefragten Token, dann werden die Daten bis einschließlich des Token entfernt und das erste nächste Zeichen wäre dann das nächste Trennzeichen.
Beispiele sind next, nextInt, ....

b) Zeilenbasierte Eingabe
Bei nextLine wird alles, was noch da ist, bis zum nächsten Zeilenwechsel genommen und dann incl. dem Zeilenwechsel aus dem Eingabestrom entfernt.

Was passiert jetzt wenn Du Eingaben machst? Die Enter/Return Taste gebe ich mit \n an:

nextInt() wird aufgerufen: Du gibst eine Zahl ein und drückst Enter: 3\n (Eingabestrom war leer nehmen wir an):
Eingabestrom hat "3\n", Trennzeichen gibt es nicht, dann kommt 3 ... \n ist das nächste Trennzeichen.
-> 3 wird zurück gegeben und Eingabestrom hat noch "\n" (Das bleibt!)

nextInt() wird erneut aufgerufen: Du gibst eine Zahl ein und drückst Enter: 4\n:
Eingabestrom hat nun "\n4\n", Trennzeichen wird übersprungen, dann kommt 4 ... \n ist das nächste Trennzeichen.
-> 4 wird zurück gegeben und Eingabestrom hat noch "\n" (Das bleibt!)

nextLine() wird aufgerufen. Es wird geschaut: Habe ich schon einen Zeilenumbruch? Und ja - der Eingabestrom hat den noch. Also wird alles vor dem \n zurück gegeben (Da ist nichts, also leerer String) und der Eingabestrom ist nun leer.

Lösungen:
1) Nur eine Variante nutzen. Also entweder Tokenbasiert oder Zeilenbasiert!
2) Nach der Tokenbasierten Eingabe den Zeilenumbruch entfernen. (Einfach ein nextLine aufrufen)
3) Das funktioniert hier aber ist keine gute Lösung. Bitte nicht machen! : Der Scanner hat auch einen internen Puffer. Aus dem Eingabestream wird also immer mehr gelesen (halt die ganze Zeile, ggf. sogar noch mehr). Somit könnte man immer einen neuen Scanner erzeugen.
 

Arrive5784

Aktives Mitglied
Nimm BufferedReader
Oder einfach diese Klasse:

Java:
import java.util.Scanner;

public class Eingabemoeglichkeiten {
    private final Scanner scan = new Scanner(System.in);

    public String readNextLine() {
        return scan.nextLine();
    }

    public char readNextChar() throws NullPointerException {
        return readNextLine().charAt(0);
    }

    public int readNextInt() throws NumberFormatException {
        return Integer.parseInt(readNextLine());
    }

    public static void main(String[] args) {
        Eingabemoeglichkeiten eingabe = new Eingabemoeglichkeiten();
        System.out.println("Gib etwas ein:");
        System.out.println(eingabe.readNextLine());
        while (true) {
            try {
                System.out.println("Gib Zahl 1 ein:");
                System.out.println(eingabe.readNextInt());
                break;
            } catch (NumberFormatException ignore) {}
        }
        // Maximal 5 Versuche:
        for (int i = 0; i < 5; i++) {
            try {
                System.out.println("Gib Zahl 2 ein:");
                System.out.println(eingabe.readNextInt());
                break;
            } catch (NumberFormatException ignore) {}
        }
        System.out.println("Gib etwas ein:");
        System.out.println(eingabe.readNextLine());
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Ostkreuz Int Scanner auf Enter Eingabe prüfen Java Basics - Anfänger-Themen 4
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
N Eingabe Kommazahlen über Scanner Java Basics - Anfänger-Themen 2
O Mehrfache Scanner-Eingabe durch Komma getrennt Java Basics - Anfänger-Themen 6
M Scanner-Eingabe nach gewissem Zeitraum überprüfen Java Basics - Anfänger-Themen 2
N Operatoren Suchen nach einer bestimmten Eingabe (durch Scanner) Java Basics - Anfänger-Themen 7
D Fehler bei String eingabe via Scanner Java Basics - Anfänger-Themen 6
B Scanner-Problem bei Eingabe Java Basics - Anfänger-Themen 4
B Erste Schritte Integer Eingabe über Scanner mit Abfangen von Eingabefehlern Java Basics - Anfänger-Themen 3
Back2theBizz Scanner Eingabe funzt nicht richtig! Java Basics - Anfänger-Themen 5
N Scanner next() oder nextLine() zur prüfung auf leere Eingabe... Java Basics - Anfänger-Themen 6
S Eingabe über Scanner einlesen und automatisch beenden Java Basics - Anfänger-Themen 11
B Scanner Eingabe checken Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
M Scanner Input mit if überprüfen Java Basics - Anfänger-Themen 5
D Scanner Java Basics - Anfänger-Themen 2
T scanner nicht erkannt Java Basics - Anfänger-Themen 3
T scanner eingaben erkennen und umtauschen Java Basics - Anfänger-Themen 4
H Scanner nextLine() bringt Dateipfad Java Basics - Anfänger-Themen 1
Jul1n4tor Programm mit Scanner und If-Statements Java Basics - Anfänger-Themen 2
I Scanner Loop Java Basics - Anfänger-Themen 1
J Scanner cannot be resolved to a type Java Basics - Anfänger-Themen 3
C Scanner und If-Anweisung in Kombi Java Basics - Anfänger-Themen 3
T j.u.Scanner(Sys.in).nextLine() wieder schließen? Java Basics - Anfänger-Themen 5
J Erste Schritte Scanner Java Basics - Anfänger-Themen 4
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
javapingu Endlosschleife bei User Input mit try Scanner Java Basics - Anfänger-Themen 7
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
Poppigescorn Arrayliste Mittels Scanner erweitern Java Basics - Anfänger-Themen 6
Jan_x8 Timer/Scanner Java Basics - Anfänger-Themen 5
M Scanner Klasse Java Basics - Anfänger-Themen 4
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
F Erste Schritte java.util.Scanner: Beliebig langen Text per Paste in Console eingeben ? Java Basics - Anfänger-Themen 14
H Quellcode Scanner Klasse Java Basics - Anfänger-Themen 2
N java.util.InputMismatchException Fehler Java Scanner Java Basics - Anfänger-Themen 5
S Scanner soll Groß-/ Kleinschreibung ignorieren Java Basics - Anfänger-Themen 2
Y Wie kann ich Konsoleneingaben durch den Scanner mit JUnit 4 testen? Java Basics - Anfänger-Themen 1
J Scanner-Klasse Java Basics - Anfänger-Themen 2
B Scanner-If/else kleine Abhebungs-Simulation Java Basics - Anfänger-Themen 3
A Scanner Befehl Java Anfänger Java Basics - Anfänger-Themen 8
D Scanner- Exception NoSuchElementException Java Basics - Anfänger-Themen 2
G Scanner nutzen und Index auslesen Java Basics - Anfänger-Themen 8
N Problem mit Scanner Java Basics - Anfänger-Themen 2
V Ersätze für Java-Scanner Java Basics - Anfänger-Themen 9
P Methode die eigentlich einen Scanner benötigt mit toString() Java Basics - Anfänger-Themen 5
A Scanner-Error Java Basics - Anfänger-Themen 8
D Java Scanner Java Basics - Anfänger-Themen 9
M String in Scanner einlesen Java Basics - Anfänger-Themen 6
ZH1896ZH Verstehe verschieden Scanner und hasNext() nicht ganz Java Basics - Anfänger-Themen 2
I Scanner auf 10 Stellen begrenzt? Java Basics - Anfänger-Themen 5
B Barcode Scanner Java Basics - Anfänger-Themen 3
V Wie lasse ich die for-Schleife so oft laufen wie per Scanner angegeben? Java Basics - Anfänger-Themen 3
L Scanner schließen in While-Schleife? Java Basics - Anfänger-Themen 2
S Scanner Java Basics - Anfänger-Themen 36
S Frage zu Scanner Java Basics - Anfänger-Themen 3
cpt.Tomato Scanner problem mit Passwort Login Java Basics - Anfänger-Themen 3
O Scanner Klasse Java Basics - Anfänger-Themen 8
M java.util.scanner Fehler Java Basics - Anfänger-Themen 5
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
W Eclipse Che Scanner Java Basics - Anfänger-Themen 8
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
X Erste Schritte Problem mit scanner Java Basics - Anfänger-Themen 2
A Scanner.useLocale(Locale.US); Java Basics - Anfänger-Themen 4
M Datei einlesen mit Scanner funktioniert nicht (FileNotFoundException) Java Basics - Anfänger-Themen 6
I Scanner und Arrays Java Basics - Anfänger-Themen 2
Neoline Methoden Scanner Methode Java Basics - Anfänger-Themen 9
E Probleme mit Scanner Java Basics - Anfänger-Themen 4
A Java Scanner Funktioniert nicht Java Basics - Anfänger-Themen 2
B Vom scanner in ein Arraylist Java Basics - Anfänger-Themen 7
L Scanner Ausgabe Java Basics - Anfänger-Themen 37
S Zeilenumbruch mit Scanner erkennen Java Basics - Anfänger-Themen 9
O Erste Schritte Scanner mehrere male benutzen (Konsole) Java Basics - Anfänger-Themen 7
W Wie arbeite ich mit dem Typ Scanner? Java Basics - Anfänger-Themen 5
J Input/Output Scanner Input als etwas einsetzen Java Basics - Anfänger-Themen 3
R CMDTools Scanner Fehler Java Basics - Anfänger-Themen 10
D nextInt() nicht für Scanner definiert? Java Basics - Anfänger-Themen 2
F Scanner Problem Java Basics - Anfänger-Themen 8
T Variablen Array mit Scanner befüllen Java Basics - Anfänger-Themen 6
C Java Scanner einlesen von txt Dokument InputMismatch Java Basics - Anfänger-Themen 9
b1ck Scanner schließen, erneute Verwendung Java Basics - Anfänger-Themen 12
F Scanner - nextLine() gibt leeren String zurück Java Basics - Anfänger-Themen 2
T Problem mit Scanner. Java Basics - Anfänger-Themen 4
J Methode über Scanner aufrufen Java Basics - Anfänger-Themen 15
J Erste Schritte Scanner negative zahl einlesen und verwenden. Java Basics - Anfänger-Themen 6
W Methoden Probleme mit der Scanner Methode Java Basics - Anfänger-Themen 2
Silvascus Scanner Problem Java Basics - Anfänger-Themen 5
W Erste Schritte import java.util.scanner funktioniert nicht Java Basics - Anfänger-Themen 2
TheMenox Error bei Scanner - woher? Java Basics - Anfänger-Themen 14
F Problem do while Schleife und Scanner Java Basics - Anfänger-Themen 2
O POI Apache sheet scanner Java Basics - Anfänger-Themen 1
A regulären Ausdruck mit Hilfe der Klasse Scanner in einem String finden Java Basics - Anfänger-Themen 2
F Array mit Scanner-Werten Java Basics - Anfänger-Themen 4
M Input/Output Scanner schließt nicht Java Basics - Anfänger-Themen 2
M Scanner class Java Basics - Anfänger-Themen 6
K Mit Scanner aus einer txt Datei lesen und jede Person mit name, vorname, geburtsdatum speichern Java Basics - Anfänger-Themen 5
S Array mit "foreach"-Schleife und nextInt (aus Scanner) beschreiben Java Basics - Anfänger-Themen 6
G Strings mit Scanner (nextLine) einlesen Java Basics - Anfänger-Themen 7
Q Scanner auf eine Zahl beschränken Java Basics - Anfänger-Themen 2
S Sonderzeichen '|' (u007C) mit Scanner einlesen Java Basics - Anfänger-Themen 1
T Scanner lässt sich nicht importieren Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben