有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何强制Java抛出算术异常?

如何强制Java在除以0.0或从负双精度中提取根时抛出算术异常?代码如下:

   double a = 1; // or a = 0 to test division by 0
   double b = 2;
   double c = 100;

   double d = b*b - 4*a*c;
   double x1 = (-b - Math.sqrt(d)) / 2 / a;
   double x2 = (-b + Math.sqrt(d)) / 2 / a;

共 (3) 个答案

  1. # 1 楼答案

    我想,你必须手工检查

    public double void checkValue(double val) throws ArithmeticException {
        if (Double.isInfinite(val) || Double.isNaN(val))
            throw new ArithmeticException("illegal double value: " + val);
        else
            return val;
    }
    

    以你为例

    double d = checkValue(b*b - 4*a*c);
    double x1 = checkValue((-b - Math.sqrt(d)) / 2 / a);
    double x2 = checkValue((-b + Math.sqrt(d)) / 2 / a);
    
  2. # 2 楼答案

    不可能让Java为这些操作抛出异常。Java实现了浮点运算的IEEE 754标准,该标准要求这些操作返回特定的位模式,其含义是“不是数字”或“无穷大”。不幸的是,Java没有实现该标准为无效操作描述的用户可访问状态标志或陷阱处理程序

    如果要特别处理这些情况,可以将结果与相应的常量(如^{})进行比较(对于NaN,必须使用^{}方法,因为NaN!=NaN)。请注意,由于后续操作将保留NaN或无穷大值,因此不必在每次单独操作后进行检查。只需检查最终结果

  3. # 3 楼答案

    此代码将抛出一个ArithmeticException

    int x = 1 / 0;