簡體   English   中英

計算素數時沒有輸出

[英]there is no output on calculating prime number

我想打印前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);
    }

}

但它沒有給出任何輸出,只是一個空白。 我無法找到我的錯誤所在。 提前致謝。

你從來沒有真正檢查一個數字是否是素數( result沒有設置在任何有用的地方)

看起來你需要重置result = true; 在第一個for循環中。 您的代碼已發布設置為result = false ,然后永遠不會更改它。

最明顯的錯誤是你的boolean result = true; 在循環之外:一旦設置為false ,它永遠不會被設置回true 您沒有看到任何輸出,因為您的程序永遠不會停止。

作為旁注,你不需要檢查所有素數到你發現的最后一個:你可以在到達候選素數的平方根時停止,即i*i > bag[k] 當你的限制為100時,你不會注意到任何效果,但如果你嘗試100000,它會有更多幫助。

您的代碼中存在許多邏輯錯誤。

首先,你有一個for循環,其終結案例與其索引器無關。 雖然這是有效的,但它使代碼更難理解。

更重要的是,結果只會被設置為false,而不是true,因此循環將永遠運行,因為有效永遠不會改變。

您確定前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);
    }

}

暫無
暫無

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

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