Heim > Java > javaLernprogramm > Warum löst mein Scanner beim Lesen eines Doubles eine InputMismatchException aus und wie kann ich das beheben?

Warum löst mein Scanner beim Lesen eines Doubles eine InputMismatchException aus und wie kann ich das beheben?

Patricia Arquette
Freigeben: 2024-12-06 09:43:10
Original
201 Leute haben es durchsucht

Why Does My Scanner Throw an InputMismatchException When Reading a Double, and How Can I Fix It?

Scanner-Doppelwert – InputMismatchException

Die InputMismatchException wird ausgelöst, wenn ein Scanner versucht, ein Token abzurufen, das nicht dem erwarteten Typ entspricht, oder wenn das Token nicht mehr vorhanden ist des Bereichs für den Typ.

Im bereitgestellten Code verwenden Sie den Scanner, um einen Double-Wert zu lesen, der die Anzahl der Gallonen darstellt Benzin im Tank. Das Standardgebietsschema des Scanners ist jedoch das Standardgebietsschema des Systems, das möglicherweise ein Komma (",") als Dezimaltrennzeichen anstelle eines Punkts (".") erwartet.

Grund für die Ausnahme:

Die Ausnahme tritt auf, weil die als Eingabe eingegebene Zahl (z. B. „5.1“) nicht dem erwarteten Format entspricht. Das Standard-Scanner-Gebietsschema erwartet, dass Zahlen mit einem Komma als Dezimaltrennzeichen formatiert werden. Ihre Eingabe verwendet jedoch einen Punkt als Dezimaltrennzeichen, was gegen das erwartete Format verstößt.

So umgehen Sie das Problem:

Um dieses Problem zu beheben, können Sie Folgendes tun Geben Sie mit der Methode useLocale() ein Gebietsschema an, das einen Punkt als Dezimaltrennzeichen verwendet. Zum Beispiel:

Scanner scanner = new Scanner(System.in).useLocale(Locale.US);
Nach dem Login kopieren

Durch die Angabe von Locale.US stellen Sie sicher, dass der Scanner das US-Gebietsschema verwendet, das einen Punkt als Dezimaltrennzeichen verwendet. Auf diese Weise interpretiert der Scanner die Eingabe korrekt als doppelten Wert.

Eine weitere Option, wenn Sie das Standardgebietsschema des Systems beibehalten, aber sowohl Komma als auch Punkt als Dezimaltrennzeichen zulassen möchten, besteht darin, einen regulären Ausdruck zu verwenden Analysieren Sie die Eingabezeichenfolge und konvertieren Sie sie manuell in ein Double:

String input = scanner.nextLine();
double value = Double.parseDouble(input.replace(",", "."));
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum löst mein Scanner beim Lesen eines Doubles eine InputMismatchException aus und wie kann ich das beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage