除以零误差

Dav*_*vid 5 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)) ; 
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

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

Tom*_*Tom 15

试着转过来

if ((a%(b-1) == 0) && (b>2))
Run Code Online (Sandbox Code Playgroud)

   if ((b>2) && a%(b-1)==0)
Run Code Online (Sandbox Code Playgroud)

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

切换后,您正在利用短路评估.一旦b> 2测试返回false,则无需计算模数(因此避免了除法)