Ich habe ein ziemlich seltsames Problem mit dem Java-Scanner gefunden, der Benutzereingaben erhält. Ich machte ein Übungsprogramm, das zuerst ein Doppel liest unter Verwendung nextDouble()
, gibt etwas trivialen Text aus und benutzt dann das gleiche Scanner-Objekt, um eine Zeichenketteneingabe unter Verwendung nextLine()
zu erhalten. HierJava-Scanner überspringt Eingabe nextLine(), aber nicht next()
ist der Code:
import java.util.Scanner;
public class UsrInput {
public static void main(String[] args) {
//example with user double input
Scanner reader = new Scanner(System.in);
System.out.println("Enter a number: ");
double input = reader.nextDouble();
if(input % 2 == 0){
System.out.println("The input was even");
}else if(input % 2 == 1){
System.out.println("The input was odd");
}else{
System.out.println("The input was not an integer");
}
//example with user string input
System.out.println("Verify by typing the word 'FooBar': ");
String input2 = reader.nextLine();
System.out.println("The string equal 'FooBar': " + input2.equals("FooBar"));
}
}
Jetzt offensichtlich meine Absicht ist, für einen zweiten Eingang zu fragen, und drucken, wenn es wahr oder falsch ist, dass die Zeichenfolge input2 gleich ‚FooBar‘. Wenn ich das aber ausführe, überspringt es die zweite Eingabe und sagt mir sofort, dass es nicht gleich ist. Allerdings wenn ich reader.nextLine()
zu reader.next()
ändern, funktioniert es plötzlich.
Es funktioniert auch, wenn ich eine neue Scanner-Instanz erstellen und verwenden reader2.nextLine()
So ist meine Frage, warum ist mein Scanner Objekt mich nicht für neue Eingabe zu fragen? Wenn ich den Wert von "input2" ausdrucke, ist es leer.
http://stackoverflow.com/questions/13102045/scanner- is-skipping-nextline-nach-using-next-nextint-oder-nextfoo? rq = 1 –
Das ist in der Tat das gleiche Problem (ich konnte es nicht in der Suche finden), aber es lässt mich immer noch fragen, warum Problem tritt mit nextLine() nach nextDouble(), aber nicht mit next() auf? Ist next() simlpy ignorieren Sie die Newline im Puffer> –