ホームページ > Java > &#&チュートリアル > JavaでInputMismatchExceptionを処理するときに無限ループを回避するにはどうすればよいですか?

JavaでInputMismatchExceptionを処理するときに無限ループを回避するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-08 06:56:11
オリジナル
1015 人が閲覧しました

How to Avoid Infinite Loops When Handling InputMismatchException in Java?

InputMismatchException による try/catch: 無限ループの解消

問題が発生しました

try/ を利用してユーザーから整数入力を読み取るプログラム内catch ブロックで無効なエントリを処理すると、InputMismatchException がスローされると無限ループが発生します(例: ユーザーが整数以外の文字を入力したとき)。

無限ループの原因

無限ループは 2 つの問題によって引き起こされます:

  1. Missing Input Cleanup: InputMismatchException がスローされると、入力されたトークンは入力ストリーム。これはストリーム内に残るため、後続の読み取り試行で繰り返し例外がスローされます。
  2. 一般的な例外処理: try/catch の catch ブロックは現在、catch (例外 e) に設定されています。この広範な処理にはすべての例外が含まれますが、これは対処する必要がある InputMismatchException にとって十分具体的ではありません。

解決策

無限ループを修正し、InputMismatchException を正しく処理するには、いくつかの手順を実行します。取得できます:

  1. 間違ったものを消費する入力: InputMismatchException をキャッチした後、入力トークンを明示的に使用して、繰り返し例外が発生するのを防ぎます。これは、input.next(); を呼び出すことで実行できます。 catch ブロック内で。
  2. 特定の例外処理を使用する: catch (Exception e) を catch (InputMismatchException e) に置き換えて、InputMismatchExceptions のみを特別に処理します。
  3. 検証の実装: さらに、 Scanner.hasNextInt() メソッドを使用して、入力を読み取る前に入力が整数であるかどうかを確認します。これは、例外を完全に回避するのに役立ちます。

提案された改善を加えて変更されたコードは次のとおりです。

import java.util.InputMismatchException;
import java.util.Scanner;

public class Except {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        boolean bError = true;
        int n1 = 0, n2 = 0, nQuotient = 0;

        do {
            try {
                System.out.println("Enter first num: ");
                n1 = input.nextInt();
                System.out.println("Enter second num: ");
                n2 = input.nextInt();
                nQuotient = n1/n2;
                bError = false;
            } 
            catch (InputMismatchException e) {
                System.out.println("Error!");
                input.next(); // Consume the erroneous input
            }
        } while (bError);

        System.out.printf("%d/%d = %d",n1,n2, nQuotient);
    }
}
ログイン後にコピー

以上がJavaでInputMismatchExceptionを処理するときに無限ループを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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