InputMismatchException は、スキャナーが予期されたタイプと一致しないトークンを取得しようとした場合、またはトークンが不足している場合にスローされます。
提供されたコードでは、Scanner を使用して double 値を読み取ります。タンク内のガソリンのガロン数を表します。ただし、スキャナのデフォルト ロケールはシステムのデフォルト ロケールであり、10 進数の区切り文字としてドット (「.」) ではなくカンマ (「,」) が想定される場合があります。
例外の理由:
入力として入力された数値 (例: "5.1") が一致しないために例外が発生します。期待される形式と一致します。デフォルトのスキャナ ロケールでは、数値が小数点区切り文字としてカンマを使用してフォーマットされることが想定されています。ただし、入力では小数点記号としてドットが使用されており、予期された形式に違反しています。
トラブルを回避する方法:
この問題を解決するには、次のことができます。 useLocale() メソッドを使用して、小数点区切り文字としてドットを使用するロケールを指定します。例:
Scanner scanner = new Scanner(System.in).useLocale(Locale.US);
Locale.US を指定すると、スキャナーが小数点区切り文字としてドットを使用する US ロケールを使用するようになります。このようにして、スキャナは入力を double 値として正しく解釈します。
システムのデフォルトのロケールを維持したいが、小数点区切り文字としてカンマとドットの両方を許可する場合の別のオプションは、正規表現を使用して次のことを行うことです。入力文字列を解析し、手動で double に変換します:
String input = scanner.nextLine(); double value = Double.parseDouble(input.replace(",", "."));
以上がDouble を読み取るときにスキャナーが InputMismatchException をスローするのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。