0

これはコードサンプルです。分子に 5、分母に 0 を入力するとします。

次のような例外が発生します。

Exception in thread "main" java.lang.ArithmeticException: / by zero
at ExceptionHandling.DivideByZeroExceptions.quotient(DivideByZeroExceptions.java:10)
at ExceptionHandling.DivideByZeroExceptions.main(DivideByZeroExceptions.java:22)

含める必要があることはわかっています ( throws Arithmetic Exception ) しかし、inputMismatchException を使用する必要があることをどのように知ることができますか?

 // Try DivideByZeroExceptions

  public class DivideByZeroExceptions {

public static int quotient(int numerator, int denominator) {
    return numerator / denominator;
}

public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    System.out.println("Please enter an integer numerator: ");
    int numerator = input.nextInt();
    System.out.println("Please enter an integer denominator: ");
    int denominator = input.nextInt();

    int result = quotient(numerator, denominator);
    System.out.printf("\nResult: %d / %d = %d\n", numerator, denominator,
            result);

}

}

4

3 に答える 3

2

inputMismatchException について何を尋ねているのか正確にはわかりませんが、これはあなたがすべきことです:

public static int quotient(int numerator, int denominator) {
    if(denominator == 0)
        throw new IllegalArgumentException("Cannot divide by 0!");
    return numerator / denominator;
}

IllegalArgumentExceptionだけではRuntimeExceptionありませんException。そのため、発生後にスレッドの実行を停止するだけなので、キャッチ/スローする必要はありません (もちろん、スレッドの停止を防ぐために、メソッドの外でキャッチすることもできます)。

于 2012-09-02T20:52:04.073 に答える
2

ArithmeticExceptionとはどちらInputMismatchExceptionも未チェックの例外です ( のサブタイプRuntimeException)。つまり、それらをキャッチまたはスローする必要はありませんが、それらを引き起こすケースを処理する必要があります。

たとえば、DivideByZeroException( ArithmeticException) を回避するには、分母がゼロでないかどうかをプログラムで確認する必要があります。その場合は、分割を行わないでください。

于 2012-09-02T20:54:02.960 に答える
1

RuntimeExceptionsthrows 節 (vg, ) で派生した例外を宣言する必要はありませんNullPointerException。そのため、コンパイラはそれを宣言する必要があることを通知しません (他の例外については、コンパイラ エラーが発生するか、IDE がメソッド宣言の誤りを通知します)。

もちろん、呼び出しているメソッドの 1 つがそれをスローする可能性がある場合は、他の例外としてキャッチできます。

ランタイム例外をチェック

于 2012-09-02T20:51:04.487 に答える