Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中使用IsPrime方法_Java - Fatal编程技术网

在Java中使用IsPrime方法

在Java中使用IsPrime方法,java,Java,这是我的代码,使用IsPrime方法确定0到1000之间的素数总数,最后打印素数总数。谁能告诉我代码出了什么问题吗 public static void main(String[] args) { int z=0; // z is the variable that holds total number of primes //n is divisor //i is dividend if (isPrime(i)) { z++;

这是我的代码,使用IsPrime方法确定0到1000之间的素数总数,最后打印素数总数。谁能告诉我代码出了什么问题吗

public static void main(String[] args) {
    int z=0; 
    // z is the variable that holds total number of primes
    //n is divisor
    //i is dividend

    if (isPrime(i)) {
        z++;
    }
    System.out.print(z+"\n");
}

public static boolean isPrime(int n){
             { 
    for(i=0; i<1000; i++)
    {
        for(n=0; n<i; n++)
            if(i%n==0) 
                return false;
            else 
                return true;
        }
    }
}

提前感谢

格式化它可能会帮助您发现错误

我发现您的代码有一些问题:

从我所看到的,在iPrime方法中有一个额外的开放式花括号。 我没有在你的main方法中声明。 您需要将ifisPrimei语句封装在从0到1000的for循环中。例如:

for (int i = 0; i <= 1000; i++) {
    if (isPrime(i))
        z++;
}
这样,它将实际检查从0到1000的所有素数

为了获得良好的编码实践,我将您的z变量命名为类似计数器的名称,这样就可以清楚地知道该变量应该做什么。在for循环中输入i是可以的,因为这是通过循环进行索引的常用方法。 您还可以使用几种策略来优化代码。您可以使用Math.sqrt函数,也可以从3开始for循环,并以2的增量递增,因为任何偶数都可以除以2,并且从1初始化计数器,因为2已经是素数。
这将根据这个和你的原始答案计算素数

public static void main(String[] args) {
    int isPrimeCount = 0;

    for(i=0; i<1000; i++)
    {
        if(Check_Prime(i))
        {
          isPrimeCount++;
        }
        System.out.println(isPrimeCount);
    }
}

private static boolean Check_Prime(int number) {
    int i;
    for (i = 2; i <= number - 1; i++)
    {
        if (number % i == 0)
        {
           return false;
        }
    }
    if (i == number)
    {
        return true;
    }
    return false;
}    

我想你已经扭转了一些局面

为什么不在主函数中从1循环到1000,然后使用isPrime函数确定每个数字是否为素数

在isPrime函数中,从2到1/2计算数字的值,并进行除法以确定它是否为素数。如果可整除,则返回False

public static void main(String[] args) {
  int z=0; 
  for (i=1;i<=1000;i++) {
       if (isPrime(i))
       {
           z++;
       }
    }
    System.out.print(z+"\n");
}
public static boolean isPrime(int n){
        for(i=2; i<=n/2; i++)
        {
           if(n%i==0) return false;
        }
        return true;
}

在将变量i传递给main中的isPrime方法之前,需要定义它。似乎编写代码的人并没有完全理解素数是什么。根据维基百科,素数或素数是一个大于1的自然数,除了1和它本身之外没有其他正因子。记住这一点,您需要确保传递给isPrime方法的值大于1。看了你的代码后,我做了一些修改。如果输入值为,我使isPrime方法返回false
请检查此修改后的代码一次,以供参考。

第一个问题是缺少一致的格式。。遇到这种情况我就停止阅读,我编辑了它。正在等待批准。尝试更好地组织和格式化代码。请描述您在使用此代码时遇到的问题。这不是猜测用isPrimeint n编写的游戏逻辑是错误的。非常好的复制品。问题是有人能说出代码的错误吗。。它不会给我一些完全不相关的代码,它们做同样的事情,但不会教我任何你需要为iPrime声明i来编译的东西。它声称4是素数。你应该在isPrime内部循环中从2迭代到sqrtn+1。你是对的。。应该有一个不信任的人。。。是的,sqrt会更快,不是吗。你应该以赔率从3迭代到sqrtn-将任何小于3的情况视为特例。这有一个小错误,在循环中它应该返回false,最后一个返回应该是true。
public class AreaComparison {

    /**
     * Starts the program.
     *
     * @param command line arguments
     */

    public static void main(String[] args) {
        int z = 0;
        int i = 2;
    // z is the variable that holds total number of primes
        //n is divisor
        //i is dividend

        if (isPrime(i)) {
            z++;
        }
        System.out.print(z + "\n");
    }

    public static boolean isPrime(int n) {
        if (n <= 1) {
            return false;
        }
        if(n == 2){
            return true;
        }

        for (int i = 2; i < n; i++) {

            if (n % i == 0) {
                return false;
            }

        }
        return true;
    }

}
public static boolean isPrime(int n){
    int factors = 0;
    for(int i = 1; i <= n; i++){
        if(n % i == 0) // ensure that you mod n not i
        factors++;
     }
    // if factors count is equals to 2 then it is prime number else it's not prime number
    if(factors == 2)
        return true;
    else
        return false;
}