私はJavaでEratosthenesのSieveを作成しようとしていますが、私が書いたコードには欠陥があるようです。 私はできないので、他の誰かが私の間違いを見つけられるのだろうかと思っていました。私が得る出力は単純に[2]です。つまり、私のメインループは機能しません。私はちょうどJavaを始めたので、あなたが詳細な答えを与えることができればそれを感謝します。Eratosthenesの故障のふるい
マイコード:
public static int[] primes(int n)
{
//Variable assignement
double sqrt;
List<Integer> primes= new ArrayList<Integer>();
//Adds 2 to primes so i don't need to include the even numbers in my for loop.
if(n>1)
{
primes.add(2);
}
//For loop that goes through the oneven numbers up to n
for(int counter1=3;counter1<=n;counter1+=2)
{
sqrt=Math.floor(Math.sqrt(0.0+counter1));
//for loop that tests if the first for loops number is prime
for(int counter2=0;sqrt<=primes.get(counter2);counter2++)
{
if(counter1 % primes.get(counter2) != 0 && counter2 ==sqrt)
{
primes.add(counter1);
}
if(counter1 % primes.get(counter2)==0)
{
break;
}
}
}
return convertIntegers(primes);
}
//Converts the list to an array
public static int[] convertIntegers(List<Integer> integers)
{
int[] ret = new int[integers.size()];
for (int i=0; i < ret.length; i++)
{
ret[i] = integers.get(i).intValue();
}
return ret;
}
コードを少し再フォーマットし、中括弧に一貫したパターンを適用してください。それ以外の場合は、コードを読んで異なるブロックを参照するのは難しいです。 – Thomas