计算10001素数,不打印输出

时间:2016-07-19 17:20:32

标签: java

public class Prime 
{
    public static void main(String [] args)
    {
        int num = 3;
        int counter = 1;
        boolean flag = true;

        while(counter < 10001)
        {
            for(int i = 2; i < num; i++)
            {
                if(num%i==0)
                {
                    flag = false;
                }
            }
            if(flag)
            {
                counter++;
            }
            num++;
        }
        System.out.println(num);
    }
}

每当我运行此代码时,都不会打印出任何结果。我假设它是因为代码效率低下,但我不知道这段代码有什么问题。

3 个答案:

答案 0 :(得分:3)

您的问题是,在flag循环之前,您不能将for重置为true;因此,一旦它为false,它仍为false,因此counter永远不会增加,这意味着while循环保护永远不会变为false

这是为什么你应该在最严格的范围内(即在while循环内)声明变量的一个例子。

while(counter < 10001)
{
  int flag = true;
  for (...) {...}

  if (flag) { counter++; }
  // ...
}

在您考虑是否效率之前,还应该确保您的代码正确的一个示例。如果您调试了代码(或者甚至只是添加了几个System.out.println),您可能会发现它实际上并没有做正确的事情。

答案 1 :(得分:1)

正如@AndyTurner所提到的,你应该在flag = true;循环中声明while,并且你的逻辑中找到素数时会有轻微错误。

在检查num后,您正在递增prime。因此,如果您的第3个素数为5,那么它将打印6作为答案。如果你的第10001个素数是X,那么它将打印X + 1作为答案。

我已在下面为您的问题发布了正确的逻辑。我希望它可以帮助你。

public class Main
{
    public static void main(String [] args)
    {
        int num = 2;
        int counter = 1;
        boolean flag = true;

        while(counter < 10001)
        {
            flag = true;
            num++;
            for(int i = 2; i < num; i++)
            {
                if(num%i==0)
                {
                    flag = false;
                }
            }
            if(flag)
            {
                counter++;
            }
        }
        System.out.println(num);
    }
}

答案 2 :(得分:0)

它不打印导致它进入无限循环,因为一旦标志变为假,计数器不会递增

public static void main(String [] args)
{
    int num = 3;
    int counter = 1;
    boolean flag = true;

    while(counter < 10001)
    {
        flag = true;
        for(int i = 2; i < num; i++)
        {
            if(num%i==0)
            {
                flag = false;
            }
        }
    if(flag)
    {
        counter++;
    }
    num++;
}
System.out.println(num);
}

试试这个。希望它有所帮助