Ich schreibe ein Programm, das eine Ereignisklasse verwendet, die in ihr eine Instanz eines Kalenders und eine Beschreibung vom Typ String hat. Die Methode zum Erstellen eines Ereignisses verwendet einen Scanner, um Monat, Tag, Jahr, Stunde, Minute und eine Beschreibung zu erfassen. Das Problem, das ich habe, ist, dass die Methode Scanner.next() nur das erste Wort vor einem Leerzeichen zurückgibt. Wenn die Eingabe also "Mein Geburtstag" lautet, ist die Beschreibung dieser Instanz eines Ereignisses einfach "Mein".
Ich habe einige Nachforschungen angestellt und herausgefunden, dass Scanner.nextLine() für dieses Problem verwendet wird, aber wenn ich dies versuche, überspringt es einfach die Stelle, an der die Eingabe erfolgen sollte. Hier ist, was ein Abschnitt meines Codes sieht aus wie:
System.out.print("Please enter the event description: ");
String input = scan.nextLine();
e.setDescription(input);
System.out.println("Event description" + e.description);
e.time.set(year, month-1, day, hour, min);
addEvent(e);
System.out.println("Event: "+ e.time.getTime());
Und das ist die Ausgabe, die ich erhalte:
Please enter the event description: Event description
Event: Thu Mar 22 11:11:48 EDT 2012
Er überspringt das Leerzeichen für die Eingabe der Beschreibung, und als Ergebnis wird die Beschreibung (die anfangs auf ein Leerzeichen - " " - gesetzt ist) nie geändert.
Wie kann ich dies beheben?
Wenn Sie das Jahr, den Monat, den Tag, die Stunde und die Minuten mit etwas wie nextInt() einlesen, bleibt der Rest der Zeile im Parser/Puffer (auch wenn er leer ist), so dass Sie beim Aufruf von nextLine() den Rest dieser ersten Zeile lesen.
Ich schlage vor, dass Sie scan.nextLine() aufrufen, bevor Sie den nächsten Prompt ausgeben, um den Rest der Zeile zu verwerfen.
Wenn Sie das Jahr, den Monat, den Tag, die Stunde und die Minuten mit etwas wie "NextInt()" einlesen, bleibt der Rest der Zeile im Parser/Puffer (auch wenn er leer ist). Wenn Sie also "NextLine()" aufrufen, lesen Sie den Rest dieser ersten Zeile.
Ich schlage vor, dass Sie scan.next()
anstelle von scan.nextLine()
verwenden.
Scanner ss = new Scanner(System.in);
System.out.print("Enter the your Name : ");
// Below Statement used for getting String including sentence
String s = ss.nextLine();
// Below Statement used for return the first word in the sentence
String s = ss.next();