ホームページ > Java > &#&チュートリアル > Double を読み取るときにスキャナーが InputMismatchException をスローするのはなぜですか?それを修正するにはどうすればよいですか?

Double を読み取るときにスキャナーが InputMismatchException をスローするのはなぜですか?それを修正するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-06 09:43:10
オリジナル
199 人が閲覧しました

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

スキャナーの double 値 - InputMismatchException

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート