2016-11-11 4 views
0

Ich versuche, einige Daten von einem Benutzer zu lesen und einige sehr einfache Berechnungen mit ihnen zu machen, aber aus irgendeinem Grund kann ich nicht erklären, das Programm stoppt nach ersten 2-3 Eingaben (wenn sie doppelt sind). Kann jemand dieses Verhalten erklären?Warum kann ich mit dieser Schleife nicht unendlich Doppel lesen?

Mein Code:

Scanner in = new Scanner(System.in); 
System.out.println("Enter your values, 'q' to quit: "); 
double average, input, smallest, largest, range; 
average = smallest = largest = range = Double.parseDouble(in.nextLine()); 

int counter = 1; 

while (in.hasNextDouble()) { 
    input = Double.parseDouble(in.nextLine()); 
    smallest = input < smallest ? input: 0; 
    largest = input > largest ? input: 0; 
    average += input; 
    counter++; 
} 
+1

Was bedeutet "Programm stoppt"? Es wird nur beendet oder es gibt eine Ausnahme? – Fildor

+0

Wenn Sie mit Ausnahmen konfrontiert sind, geben Sie einfach die Stack-Trace an, um zu verstehen, was genau das Problem für "Programm stoppt" hier ist. –

+0

Es scheint zu laufen .. Welche Werte haben Sie versucht? – jay

Antwort

4

Betrachten Sie diese Eingabe:

1.23 
4.56 7.89 

Um Scanner sieht aus wie eine gültige Folge von drei double s auf zwei getrennten Leitungen. Wenn Sie nextLine aufrufen, um die erste double zu erhalten, funktioniert es gut, weil die Nummer die gesamte Zeichenfolge belegt.

Wenn Sie das gleiche für die nächste double tun, dass Sie die Zeichenfolge versuchen sieht wie folgt aus zu analysieren:

"4.56 7.89" 

Diese Saite ist nicht eine gültige double, so dass Sie es nicht analysieren kann.

Ein Ansatz, um mit diesem Problem umzugehen, besteht darin, nextDouble aufzurufen, und zu vermeiden, vollständig zu analysieren. Das Koppeln von hasNextDouble() mit nextDouble() hat den Vorteil, dass Benutzer ihre Daten nicht in andere Zeilen eingeben müssen.

Hinweis: Der erste Aufruf von Double.parseDouble(in.nextLine()) geschieht, ohne zu überprüfen, dass Scanner nächste double hat, so dass Ihr Programm bei dem ersten schlechten Eingang zum Absturz bringen konnte.

+0

Danke für die Antwort. Ich glaube nicht, dass dies das Problem ist, aber siehe oben meinen Kommentar, um mir zu beweisen, dass ich falsch liege! – Thomas

+0

@Thomas Warte ... du "denkst" das? Also hast du es nicht versucht? – Tom

+0

@Tom, ich erhalte nicht in Strings des Formulars "3.3 4.5 3.4". Ich erhalte Strings mit deutlichen Doppelpunkten in jeder Zeile, das habe ich bereits oben in einem Kommentar geschrieben. – Thomas

Verwandte Themen