簡體   English   中英

計算10001素數,不打印輸出

[英]Calculating the 10001 prime number, no output is printed

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);
    }
}

每當我運行此代碼時,都不會打印出任何結果。 我假設它是因為代碼效率低下,但我不知道這段代碼有什么問題。

你的問題是你在for循環之前沒有將flag重置為true; 所以一旦它是false ,它仍然是false ,所以counter永遠不會遞增,這意味着while循環保護永遠不會變false

這是為什么你應該在最嚴格的范圍內聲明變量的例子(即在while循環內)。

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

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

這也是為什么在考慮代碼是否有效之前應確保代碼正確的原因。 如果您調試了代碼(或者甚至只是添加了幾個System.out.println ),您可能已經發現它實際上並沒有做正確的事情。

正如@AndyTurner所提到的,你應該聲明flag = true; while循環中,你的邏輯中有一個輕微的錯誤,用於查找素數。

在檢查prime后,您正在遞增num 所以,如果你的第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);
    }
}

它不是打印導致它進入無限循環,因為一旦標志變為假,計數器就不會遞增

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);
}

試試這個。 希望它有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM