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);
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(",", "."));
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!