6

素数に関する問題を解決していましたが、配列を使用して解決策を見つけましたが、いくつかの問題に配列リストを使用したかったのですが、そのうちの 1 つは Arraylist をよく理解することです。しかし、arraylist を使用すると結果が同じではないことがわかりました。ここに 2 つのコードがあります。

//配列の使用

import java.util.Arrays;
public class Prime {
    public static void main(String[] args) {
        primeNumber(100);
    }
    public static void primeNumber(int end) {
        boolean primeNumbers[] = new boolean[end]; 
        for (int i = 0; i < end; i++) {
            primeNumbers[i] = true;
        }
        for (int i = 2; i < primeNumbers.length; i++) {
            if (primeNumbers[i] ) {
                for (int j = i+i; j < primeNumbers.length; j += i) {
                    primeNumbers[j]= false;
                }
            }
        }
        for (int j = 2; j < primeNumbers.length; j++) {
            if (primeNumbers[j]) {
                System.out.println(j);

            }
        }   
    }
}

//ArrayList の使用

import java.util.ArrayList;
public class Prime {
    public static void main(String[] args) {
        primeNumber(100);
    }

    public static void primeNumber(int end) {
        ArrayList<Boolean> primeNumbers = new ArrayList<Boolean>(); 
        for (int i = 0; i < end; i++) {
            primeNumbers.add(i,true);
        }
        for (int i = 2; i < primeNumbers.size(); i++) {
            if (primeNumbers.get(i) ) {
                for (int j = i+i; j < primeNumbers.size(); j += i) {
                    primeNumbers.add(j, false);
                }
            }
        }
        for (int j = 2; j < primeNumbers.size(); j++) {
            if (primeNumbers.get(j)) {
                System.out.println(j);

            }
        }

    }
}

Arraylist を使用して何が間違っているかを知ることはできますか? 同じ結果に arraylist を使用したい場合はどうすればよいですか?

助けてくれてありがとう。

4

3 に答える 3

7

それ以外の

primeNumbers.add(j, false);

あなたが使用する必要があります

primeNumbers.set(j, false);

add()指定された位置に新しい要素を追加するため (つまり、ArrayList が 1 つの要素だけ大きくなります)、set()指定された位置にある要素の値のみを設定します。

于 2012-04-27T11:55:01.283 に答える
4
primeNumbers.add(j, false);

要素を配列リストに追加し、インデックス >=jを持つすべての要素を右にシフトします [前の要素を含むj]。

primeNumbers[j]= false

既存の要素をオーバーライドし、要素 jをシフトしません。

あなたはおそらくArrayList.set()代わりにArrayList.add()

于 2012-04-27T11:54:59.187 に答える