2016-09-30 3 views
-2

Ich stecke auf diesem Teil eines Programms fest, wo der Benutzer mehrere ganze Zahlen eingibt und nur die erste ausgewählt wird. In meinem aktuellen Code ist die Ausgabe das.Ignorieren/Löschen zusätzlicher ganzer Zahlen von Benutzereingabe

There are 10 sticks on the board. 
Jerry: How many sticks do you take (1-3)? *1 3 4 2* 
There are 9 sticks on the board. 
Sherry: How many sticks do you take (1-3)? There are 6 sticks on the board. 
Jerry: How many sticks do you take (1-3)? Please enter a number between 1 and 3. 
Jerry: How many sticks do you take (1-3)? There are 4 sticks on the board. 
Sherry: How many sticks do you take (1-3)? 

Während im angegebenen Beispiel ist der Ausgang dies.

Jerry: How many sticks do you take (1-3)? *1 3 4 2* 
There are 8 sticks on the board. 
Pat: How many sticks do you take (1-3)? *3* 
There are 5 sticks on the board. 

Es scheint, dass die zusätzlichen ganzen Zahlen in der Warteschlange stehen und auf den nächsten Scanner-Eingabebefehl warten. In dem gegebenen Beispiel werden die Extra-Ganzzahlen gelöscht. Wie wird das gemacht? Gibt es einen Befehl, um alle aktuellen Benutzereingaben zu löschen, oder werden alle Ganzzahlen mit .hasNextInt eingelesen und werden alle anderen einfach weggeworfen? Auch, wo hat hasNextInt in der Eingabe? Wird der nächste hasNextInt-Befehl nach dem Ergebnis "true" oder "false" an derselben Eingabeposition angezeigt, wenn keine neue Eingabe hinzugefügt wurde?

(Der Text eingeschlossen von ** ist eine Benutzereingabe.)

+0

Bitte geben Sie Ihren Code in die Frage ein. – fvu

+0

Fügen Sie Ihren Code hinzu. Ich nehme an, Sie verwenden 'while (sc.hasNextInt()) {}' anstelle von 'if'. –

Antwort

0

Wenn Sie sich nicht sicher sein, kann der Benutzer den richtigen Eingang betreten wird, können Sie es durch die Annahme String s statt int s tun können. Wie so:

Scanner s = new Scanner(System.in); 
System.out.print("How many?: "); 
int many = Integer.parseInt(s.nextLine().trim().split(" ")[0]); 
System.out.println(many); 

Dies wird auch Eingaben wie " 2 5 6 5" behandeln sowie die Beispiele, die Sie haben, indem die gesamte Eingabekette nehmen, weg von Trimmen jeden vorderen und hinteren " " s, Aufteilen der Zeichenfolge in ein Array von String s um " " s und die erste (die gewünschte) mit dem Index 0 zurückgeben.

Was es nicht tut, ist, wie geschrieben, Eingaben wie " foo bar 42" oder andere Eingaben, bei denen der erste Index der aufgeteilten Zeichenfolge nicht als Integer analysiert werden kann. Wenn Sie dies versuchen, erhalten Sie eine NumberFormatException.

Verwandte Themen