Java - 除以零时无法捕获ArithmeticException

时间:2015-01-29 14:42:12

标签: java divide-by-zero

我一定在这里做了些蠢事。但我似乎无法弄清楚为什么这个简单的代码不起作用。 InputMismatchException有效,但ArithmeticException永远不会被捕获。

import java.util.InputMismatchException;
import java.util.Scanner;
public class SubChap02_DivisionByZero {
    public static double quotient(double num, double denum) throws ArithmeticException {
        return num / denum;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double num, denum, result;
        boolean continueLoop = true;
        do {
            try {
                System.out.printf("Please enter the numerator: ");
                num = scanner.nextFloat();
                System.out.printf("Please enter the denumerator: ");
                denum = scanner.nextFloat();
                result = quotient(num, denum);
                continueLoop = false;
                System.out.printf("THIS: %.2f/%.2f is %.2f\n", num, denum, result);    
                scanner.close();
          } catch (ArithmeticException arithmeticException) {
              System.err.printf("Exception : %s\n", arithmeticException);
              scanner.nextLine();
              System.out.println("You can try again!");
          } catch (InputMismatchException inputMismatchException) {
              System.err.printf("Exception : %s\n", inputMismatchException);
              scanner.nextLine();
              System.out.println("You can try again!");
          }
      } while (continueLoop == true);
    }
}

3 个答案:

答案 0 :(得分:12)

如果您希望在除以0.0时抛出ArithmeticException,则它不会被激活。 将double乘以0将返回Double.POSITIVE_INFINITY(将正双精度除以0.0),Double.NEGATIVE_INFINITY(将负双精度除以0.0)或Double.NaN(将0.0除以0.0)。

将int除以0会给你这个例外。

答案 1 :(得分:1)

这是因为你没有抛出异常,最有可能发生的事情是你正在尝试使用除以0的分数。当你使用float时,允许这样的操作。因此,您将获得InfinityNaN

如果您将输入更改为整数,那么您将获得异常

答案 2 :(得分:1)

浮点除以不抛出ArithmaticException。它适用于整数除法。 See this answer for more detail.