
Leo Jiang
Ich habe so etwas:
Scanner in=new Scanner(System.in);
int rounds = 0;
while (rounds < 1 || rounds > 3) {
System.out.print("How many rounds? ");
if (in.hasNextInt()) {
rounds = in.nextInt();
} else {
System.out.println("Invalid input. Please try again.");
System.out.println();
}
// Clear buffer
}
System.out.print(rounds+" rounds.");
Wie kann ich den Puffer löschen?
Edit: Ich habe folgendes versucht, aber es funktioniert aus irgendeinem Grund nicht:
while(in.hasNext())
in.next();
Versuche dies:
in.nextLine();
Dadurch rückt der Scanner zur nächsten Zeile vor.
Sie können den Puffer des Scanners nicht explizit löschen. Intern kann es den Puffer löschen, nachdem ein Token gelesen wurde, aber das ist ein Implementierungsdetail außerhalb der Reichweite der Programmierer.
Verwenden Sie den folgenden Befehl:
in.nextLine();
gleich nach
System.out.println("Invalid input. Please Try Again.");
System.out.println();
oder nach der folgenden geschweiften Klammer (wo Ihr Kommentar dazu steht).
Dieser Befehl rückt den Scanner zur nächsten Zeile vor (beim Lesen aus einer Datei oder einem String liest dies einfach die nächste Zeile), wodurch er in diesem Fall im Wesentlichen gelöscht wird. Es löscht den Puffer und bereitet den Scanner für eine neue Eingabe vor. Es kann vorzugsweise zum Löschen des aktuellen Puffers verwendet werden, wenn ein Benutzer eine ungültige Eingabe gemacht hat (wie z. B. einen Buchstaben, wenn er nach einer Zahl gefragt wird).
Eine Dokumentation der Methode finden Sie hier:
http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextLine()
Hoffe das hilft!
Das sollte es beheben…
Scanner in=new Scanner(System.in);
int rounds = 0;
while (rounds < 1 || rounds > 3) {
System.out.print("How many rounds? ");
if (in.hasNextInt()) {
rounds = in.nextInt();
} else {
System.out.println("Invalid input. Please try again.");
in.next(); // -->important
System.out.println();
}
// Clear buffer
}
System.out.print(rounds+" rounds.");

SansWit
Andere Leute haben vorgeschlagen, zu verwenden in.nextLine()
um den Puffer zu löschen, was für einzeilige Eingaben funktioniert. Wie aus Kommentaren hervorgeht, kann die System.in-Eingabe jedoch manchmal mehrzeilig sein.
Sie können stattdessen ein neues Scanner-Objekt erstellen, in dem Sie den Puffer löschen möchten, wenn Sie System.in und keinen anderen InputStream verwenden.
in = new Scanner(System.in);
Wenn du das tust, nicht Forderung in.close()
Erste. Dadurch wird System.in geschlossen, und Sie erhalten NoSuchElementExceptions bei nachfolgenden Aufrufen von in.nextInt();
System.in sollte während Ihres Programms wahrscheinlich nicht geschlossen werden.
(Der obige Ansatz ist spezifisch für System.in. Er ist möglicherweise nicht für andere Eingabeströme geeignet.)
Wenn Sie Ihr Scanner-Objekt wirklich schließen müssen, bevor Sie ein neues erstellen, schlägt diese StackOverflow-Antwort vor, einen InputStream-Wrapper für System.in zu erstellen, der über eine eigene close()-Methode verfügt, die den umschlossenen System.in-Stream nicht schließt. Dies ist jedoch für einfache Programme übertrieben.

Kamran Riyaz
scan.nextLine();
Setzen Sie die obige Zeile vor dem Lesen der String-Eingabe
10147700cookie-checkWie kann ich den Scanner-Puffer in Java löschen?yes
Was meinst du mit “Puffer löschen”? Konsole löschen (wie der Befehl cls dos)?
– Davide Consonni
15. Mai 2012 um 15:38 Uhr
Ich suche etwas in der Art von:
while(in.hasNext()) in.next();
. Aus irgendeinem Grund funktioniert diese Schleife nicht.– Leo Jiang
15. Mai 2012 um 20:38 Uhr