InputMismatchException を伴う try/catch ブロックの無限ループ: 解決策
try で InputMismatchException を処理するときに Java プログラムで無限ループが発生する/catch は、ユーザーから整数入力を受け取るときにブロックします。この動作は、InputMismatchException をキャッチした後、スキャナが無効な状態のままになり、ループが無限に繰り返されることが原因です。
この問題を解決するには、catch ブロック内で次の操作を実行する必要があります。 :
catch (InputMismatchException e) { System.out.println("Error!"); input.next(); // Move to the next line to avoid the infinite loop }
input.next() メソッドはスキャナ ポインタを次の行に進め、エラーの原因となった無効な入力を効果的に破棄します。 Exception.
あるいは、整数の読み取りを試行する前に hasNextInt() メソッドを利用して、読み取られる値が実際に整数であることを確認することもできます。このアプローチにより、例外処理の必要性が完全に排除されます。
while (true) { if (input.hasNextInt()) { n1 = input.nextInt(); break; } else { input.next(); // Skip non-numeric input } }
Java スキャナのドキュメントには、InputMismatchException がスローされた後、スキャナは例外の原因となるトークンを渡さないため、トークンを取得する必要があると記載されていることに注意してください。または他の手段を介してバイパスされます。これらの変更を実装すると、Java プログラムの無限ループの問題が軽減されます。
以上がJavaでInputMismatchExceptionを処理するときに無限ループを防ぐ方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。