1

エラトステネスのふるいに問題があります。だから私は「シャウムのアウトライン」と呼ばれる本からふるいの数学計算を取得しましたが、その本は間違ったコードをプログラムするようにプログラムされていると思います... これは本からのコードです:

public class Sieve
{
    final static int P = 800;
    static boolean[] isPrime = new boolean[count];

Sieve();
{
    for (int i = 2; i<P; i++)
    {
        isPrime[i] = true;
    }
    for (int i = 2; i<P/2; i++)
    {
        if (isPrime[i])
        {
            for (int j = 2*i; j<P; j += i)
            {
                isPrime[j] = false;
            }
        }   
    }
}
public static void main(String[] args)
{
    new Sieve();
    print();
}

static void print()  {
    for (int i=0; i<count; i++)
        if (isPrime[i]) System.out.println(i + " ");
        else if (i%90==0) System.out.println();
        System.out.println();
}}

ええ、私はコードを使用し、「Sieve()」が認識されないという事実のために若干の変更を加えました。以下は私のコードです:

public class Primenumbers
{
    final static int count = 1000;
    static boolean[] isPrime = new boolean[count];

    public static sieve(int count, boolean isPrime);
    {
        for (int i = 2; i<count; i++)
        {
            isPrime[i] = true;
        }
        for (int i = 2; i<count/2; i++)
        {
            if (isPrime[i])
            {
                for (int j = 2*i; j<count; j += i)
                {
                    isPrime[j] = false;
                }
            }   
        }
    }
    public static void main(String[] args)
    {
        for (int i=0; i<count; i++)
        {
            if (isPrime[i])
            {
                System.out.println(i + " ");
            }
        }
    }
}

だから...私は何を間違っていますか?助けてくれてありがとう!

4

1 に答える 1

0

私は何を間違っていますか?

定義sieve()しましたが、それを呼び出すことはありません。印刷する前に呼び出す必要があります。

public static void main(String[] args)
{
    sieve(); // <<== Here
    for (int i=0; i<count; i++)
    {
        if (isPrime[i])
        {
            System.out.println(i + " ");
        }
    }
}

本で機能した理由は、コンストラクターで初期化が行われたためです。変更されたコードは初期化を静的関数に移動しましたが、その初期化の呼び出しに失敗しました。

また、 の宣言からパラメーターを削除する必要もあります。これは、既におよびsieveにアクセスできるためです。isPrimecount

別の方法は、メソッドを完全に削除しsieveて、静的初期化子に置き換えることです。それ以外の

public static sieve() 
{
    // Code to initialize isPrime
}

書きます

static
{
    // Code to initialize isPrime
}

この変更により、sieve()メソッドは静的イニシャライザになり、クラス内の他のものが実行される前に常に呼び出されます。

于 2013-10-11T10:23:23.167 に答える