Mit Scanner mit einer Folge von Integer-zahlen
Schreibe ich ein Programm nehmen, eine Sequenz von ganzen zahlen von der Konsole, z.B.
1 5 3 4 5 5 5 4 3 2 5 5 5 3
berechnen Sie die Anzahl der vorkommen, und drucken Sie die folgende Ausgabe:
0 - 0 1 - 1 2 - 1 3 - 3 4 - 2 5 - 7 6 - 0 7 - 0 8 - 0 9 - 0
wo die zweite Zahl ist die Anzahl der vorkommen der ersten Reihe.
Code:
public static void main (String args[])
{
Scanner chopper = new Scanner(System.in);
System.out.println("Enter a list of number: ");
int[] numCount = new int[10];
int number;
while (chopper.hasNextInt()) {
number = chopper.nextInt();
numCount[number]++;
}
for (int i = 0; i < 10; i++) {
System.out.println(i + " - " + numCount[i]);
}
}
Aber nach der Eingabe der Sequenz, wir müssen geben Sie ein nicht-integer-Zeichen, und drücken Sie "Enter", um beenden Sie den Scanner und führen Sie die "for" - Schleife. Gibt es eine Möglichkeit, dass wir nicht haben, um geben Sie ein nicht-integer-Zeichen zum beenden der Scanner?
- mögliche Duplikate von Wie zu beenden, Scanner, wenn die Eingabe vollständig ist?
- bitte angeben, was Sie möchten, dass der Benutzer zu tun, um das Programm zu beenden ? Sie wan ' T ihm, geben Sie "Ende" zum Beispiel ? oder vielleicht eine sentinel-Wert 99999?
- das wäre Teil einer Antwort in form einer Erklärung, warum dies nicht nur die Arbeit, wenn Sie
Scanner
. - Savard Der Benutzer-Typen integer-Sequenz und drücken Sie die EINGABETASTE, um das Programm zu beenden
Du musst angemeldet sein, um einen Kommentar abzugeben.
Konnte man durch drücken der EINGABETASTE gefolgt von Strg-D.
Wenn Sie nicht wollen, das zu tun, dann gibt es keinen anderen Weg, mit einer
Scanner
.Haben Sie zum Lesen der Eingabe auf eine andere Weise, zum Beispiel mit einem
BufferedReader
:Sogar besser (inspiriert durch @user3512478's Ansatz), mit zwei Scannern, ohne
BufferedReader
:Beste Weg IMO:
Hoffe, das hilft!
Beste Weg: Nicht nur für dieses Muster, für jede Art von Sequenz-Eingang Anerkennung, ändern Trennzeichen
Scanner
Objekt bis zur gewünschten Sequenz erkannt.Hier ändern Sie in diesem Fall chopper-Trennzeichen um whitespace-Zeichen (Leerzeichen). ich.e
"\\s"
. Sie können auch"\\s*"
für die Angabe von null oder mehr vorkommen von whitespace-ZeichenDies macht den Scanner zu prüfen, für die Räume, anstatt zu warten, für die Enter-Taste Schlaganfall.
Versuchen Sie es mit einer for-Schleife.
Von Oracle Doc es sagt:
Ein scan-Vorgang blockieren können und auf eine Eingabe wartet.
Beide hasNext und next-Methoden blockieren können und wartet auf weiteren input
for (int i:1; i<10;i++)
Sie verwenden möchten, könnenwhile (scanner.hasNextInt())
.