配列の使用が必要な割り当てに問題があります。エラトステネスのふるいアルゴリズムを作成し、すべての素数を出力する必要があります。私が知る限り、操作の順序は正しいので、かなり混乱しています。コードは次のとおりです。
//Declare the array
boolean numbers [] = new boolean[1000];
int y = 0;
//Declare all numbers as true to begin
for(int i = 2; i < 1000;i++){
numbers[i] = true;
}
//Run loop that increases i and multiplies it by increasing multiples
for (int x = 2; x < 1000; x++) {
//A loop for the increasing multiples; keep those numbers below 1000
//Set any multiple of "x" to false
for(int n = 2; y < 1000; n++){
y = n * x;
numbers[y] = false;
}
}
まず、配列内のすべての数値を true に設定します。次に、2 番目のループは "x" を 2 で開始し、その内部で "x" を "n" の値で乗算するネストされたループであり、"n" はその乗算の積 ("y ") は 1000 を下回っています。"y" がその最大値に達すると、"x" は 1 数値上がり、素数以外の数値がすべて false に設定されるまでこのプロセスが繰り返されます。
コードを作成したときはこれが私のロジックでしたが、実行しようとすると「ArrayIndexOutOfBoundsException」エラーが発生します。私が言えることから、すべてを1000未満に保つように設定したので、配列サイズを超えてはいけません。
「x」が増加すると、すでに超えている数値を超えるため、おそらく最も効率的なアルゴリズムではないことはわかっていますが、これは私が考えることができる最も単純なものでした。