【问题标题】:How do I throw an exception for division by 0?如何抛出除以 0 的异常?
【发布时间】:2012-10-10 23:23:57
【问题描述】:

如果我的斜率分母为 0,我如何抛出异常以输出“计算失败,x1 和 x2 之间没有变化”...以下块是类文件中的方法。

public double getSlope() {
    double rise = p2.getY() - p1.getY();
    double run  = p2.getX() - p1.getX();
    double slope = rise / run;
    return slope;
}

我正在将结果输出到我的测试文件或包含 main 方法的驱动程序类。

【问题讨论】:

  • if(denominator == 0) // tell the user that he cannot divide by zero
  • 但是有一个90度的斜坡
  • 如果你不在乎抛出什么样的异常,你不需要做任何事情:ArithmeticException 已经被抛出了。

标签: java exception constructor try-catch private-methods


【解决方案1】:
if (run == 0) {
    throw new IllegalArgumentException("Divide by zero error");
}

【讨论】:

  • 字符串中的拼写... ^ xD
【解决方案2】:

要抛出异常,您需要这样做:

public double getSlope() {
    double rise = p2.getY() - p1.getY();
    double run  = p2.getX() - p1.getX();
    if (run == 0) throw new Exception(
                   "Calculation failed, there is no change between x1 and x2");
    double slope = rise / run;
    return slope;
}

注意方法中的关键字throw,这显然不会从main方法中捕获,因此会崩溃!

【讨论】:

    【解决方案3】:

    你可以的

    if(run == 0) {
        throw new java.lang.ArithmeticException("Calculation failed, there is no change between x1 and x2");
    }
    double slope = rise / run; 
    

    另外,如果更有意义,您可以改用java.lang.IllegalStateException

    或者,java.lang.RuntimeException,如果你只有消息是相关的。

    【讨论】:

      【解决方案4】:

      当你除以零时,它会自动抛出一个名为 java.lang.ArithmeticException 的异常。

      如果你真的想抛出你自己的异常,把你的消息或类似的东西,你可以如下:

      if(run == 0) {
          throw new ArithmeticException("Your message here");
      }
      

      请注意,这是一个 RuntimeException,您没有义务处理它。如果你想创建一些强制开发者处理的东西,你可以创建自己的 Exception,但我认为不是这样。

      【讨论】:

      • 这仅适用于整数。 1.0 / 0 不会那样做。
      【解决方案5】:

      试试这个:

      public double getSlope() throws Exception {
          double rise = p2.getY() - p1.getY();
          double run  = p2.getX() - p1.getX();
          if (run == 0) throw new Exception("Calculation failed.");
          double slope = rise / run;
          return slope;
      }
      
      public class TestLine {
          public static void main(String[] args) {
              try{
                  l1.getSlope();
              } catch (Exception e) {
                  System.out.println(e.getMessage());
              }
      }
      

      【讨论】:

        【解决方案6】:

        修改你的函数如下:

        public double getSlope() throws DivideByZero{
            double rise = p2.getY() - p1.getY();
            double run  = p2.getX() - p1.getX();
        
            if (run == 0) {
                throw new MyException("Denominator is zero");
            }
        
            double slope = rise / run;
            return slope;
        }
        

        我的回答还要求您创建一个名为MyException 的自定义异常类。关于这样做的细节留给读者作为练习。 (提示:Google 是一个很棒的工具。)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-05-29
          • 1970-01-01
          • 2017-10-14
          • 2011-12-26
          • 2016-12-25
          • 2013-05-24
          • 2014-12-12
          相关资源
          最近更新 更多