在Java中使用If/Else返回布尔值

2022-05-12 00:00:00 loops if-statement primes java

我正在尝试编写代码来检查某个数字是否为质数,如果它是质数,则使用if/Else语句返回true

我给出了以下代码,我已经写好了。 它始终显示异常";Missing Return Statement&Quot;。

class Main
{
    static boolean isPrime(int x)
    {
        for(int i = 2;i <= x/2;++i)
        {     
            if(x%i == 0)
            {
                return false;
            }
            else
            {
                return true;
            }   
        }
    }

    public static void main (String args[])
    {              
        boolean prime = isPrime(11);
        System.out.println(prime);           
    }
}

解决方案

代码中的问题是,您第一次返回的模数不是0。这是错误的,因为您必须确保x不能被范围[2, x/2]中的任何数字整除。

按如下方式修改您的方法:

static boolean isPrime(int x)
{
    if(x <= 1)
    {
        return false;
    }

    boolean ret = true;

    for(int i = 2;i <= x/2;++i)
    { 
         if(x%i == 0)
         {
              ret = false;
              break;
         }           
     }

     return  ret;
 }

这样,只要你确定这个数不是质数,你就中断。如果它是素数,它将完成循环,而不会找到非零余数。

x<=1场景是您遇到警告的原因,因为对于那些输入,您的方法在没有遇到return语句的情况下退出。我刚在函数开始时检查了此条件。


查找素数

我只是建议了isPrime实现的修复方法,这是查找质数的最简单方法。无论如何,有更聪明的方法来找到它们:

  • Siege of Eratosthenes方法
  • 可以只检查奇数,节省一半的时间
  • 您可以检查x是否属于6*x±1集合。事实上,数字5中的所有质数都遵循这个规则

相关文章