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() メソッドは、スキャナ ポインタを次の行に進め、例外の原因となった無効な入力を効果的に破棄します。
あるいは、前に hasNextInt() メソッドを利用することもできます。整数を読み取ろうとすることで、読み取られる値が実際に整数であることが保証されます。このアプローチにより、例外処理の必要性が完全になくなります:
while (true) { if (input.hasNextInt()) { n1 = input.nextInt(); break; } else { input.next(); // Skip non-numeric input } }
Java スキャナのドキュメントには、InputMismatchException がスローされた後、スキャナは例外の原因となるトークンを渡さないため、トークンを取得するか、他の手段でバイパスする必要があると記載されていることに注意してください。これらの変更を実装すると、Java プログラムの無限ループの問題が軽減されるはずです。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3