除以零误差

时间:2010-03-10 03:09:59

标签: java divide-by-zero

这是代码(java):

class prime
{

    public static boolean prime (int a, int b) 
    { 
        if (a == 0) 
        {
            return false; 
        }
        else if ((a%(b-1) == 0) && (b>2))
        {
            return false; 
        }
        else if (b>1) 
        {
            return (prime (a, b-1)) ;
        }
        else
        {
            return true; 
        }

    }

    public static void main (String[] arg) 
    {
        System.out.println (prime (7, 7)) ; 
    }
}

这是我尝试运行时收到的错误消息(编译正常):

Exception in thread "main" java.lang.ArithmeticException: / by zero
    at prime.prime(prime.java:10)
    at prime.prime(prime.java:16)
    at prime.prime(prime.java:16)
    at prime.prime(prime.java:16)
    at prime.prime(prime.java:16)
    at prime.prime(prime.java:16)
    at prime.prime(prime.java:16)
    at prime.main(prime.java:27)

所以这意味着我分零了一些怎么回事?或者它意味着什么?我不知道我是如何除以零的。什么地方出了错?

4 个答案:

答案 0 :(得分:14)

尝试转过来

if ((a%(b-1) == 0) && (b>2))

   if ((b>2) && a%(b-1)==0)

正在发生的事情是a%(b-1)操作正在b>2测试之前执行。

切换后,您正在利用short-circuit evaluation。一旦b> 2测试返回false,则无需计算模数(因此避免划分)

答案 1 :(得分:2)

由于你的递归电话:

return (prime (a, b-1)) ;

您将在某个时候使用b为1的值调用prime。这意味着在第二个条件下,您将测试a%0。由于模运算符(%)本质上是一个除法,这就是将你的除以零问题。

解决方案可能是抓住这种情况来强制执行b>在做%之前你的情况是2。

答案 2 :(得分:0)

我假设x % 0形式的任何代码都会抛出此错误。您的代码无法防范这种可能性。

答案 3 :(得分:0)

 A % B = C

%的数学意义是将A除以B,此操作的提示为C。当B0时,您有效地问我们除以零时的提示是什么。在数学中,尽管除数没有定义,这是java.lang.ArithmeticException

的原因