计算素数时没有输出

时间:2012-02-17 20:52:06

标签: java arrays primes

我想打印前100个素数。所以,我创建了一个int 100数组。我添加了第一个prime,bag [0] = 2,然后对于以下数字,我试着编写一个算法。它将从3开始并继续直到阵列已满。如果数字是否可以被数组中的前一个元素整除,那么每个数字都被确定为是素数,如果它是素数,那么它将被添加到数组中。

这是我的代码:

public class Trial02 
{   
    public static void main( String[] args) 
    {       
        int[] bag = new int[100];
        bag[0] = 2; //first element of prime array
        int valid = 1;
        int i;
        boolean result = true;
        String str = "";

        //starting from 3 it checks if a number is prime until array is full
        for( i=3; valid<bag.length; i++)
        {
            //it checks if previous primes in array are divisible by current number until coming to current number
            for(int k=0; k<valid; k++)
            {
                if( i % bag[k] == 0)
                    result = false;
            }

            if( result == true) //if it is prime it is added to array
            {
                bag[valid] = i;
                valid ++;
            }
        }

        //printing results
        for(int m=0; m < bag.length; m++)
            str = str + bag[m] + " ";
        System.out.println("zaa xd");
        System.out.println(str);
    }

}

但它不提供任何输出,只是一个空白。我无法找到我的错误所在。 提前谢谢。

5 个答案:

答案 0 :(得分:2)

你从来没有真正检查一个数字是否为素数(result没有设置在任何有用的地方)

答案 1 :(得分:2)

您似乎需要在第一个result = true;循环内重置for。您的代码已过帐设置result = false,然后永远不会更改它。

答案 2 :(得分:2)

最明显的错误是您的boolean result = true;不在循环中:一旦设置为false,它就永远不会被设置回true您看不到任何输出,因为您的程序永远不会停止。

作为旁注,您不需要检查所有素数到你发现的最后一个素数:一旦到达候选素数的平方根,即i*i > bag[k],就可以停止。当你的限制为100时,你不会注意到任何效果,但是如果你尝试100000,它会有很多帮助。

答案 3 :(得分:0)

您的代码中存在许多逻辑错误。

首先,你有一个for循环,其终结案例与其索引器无关。虽然这是有效的,但它使代码更难理解。

更重要的是,结果只会被设置为false,而不是true,因此循环将永远运行,因为有效性永远不会改变。

答案 4 :(得分:0)

确定前100个素数的逻辑是不正确的。并且存在多个逻辑错误,如其他人所示。我重写了你的代码,但没有经过测试。我想它会起作用:

public class Trial02 
{   
    public static void main( String[] args) 
    {       
    int[] bag = new int[100];
    bag[0] = 2; //first element of prime array
    int valid = 1;
    int i;
    boolean isPrime = true;
    String str = "";

    //starting from 3 it checks if a number is prime until array is full
    for( i=3; valid<bag.length; i++)
    {
        isPrime = true;
        for (int k = 2; k < i; k++)
        {
            if (i % k == 0)
            {
                isPrime = false;
                break;
            }
        }

        if (isPrime == true)
        {
            bag[valid++] = i;
        }
    }

    //printing results
    for(i=0; i < bag.length; i++)
        str = str + bag[i] + " ";
    System.out.println("zaa xd");
    System.out.println(str);
    }

}