Javaでエラトステネスのふるいを作成しようとしていますが、作成したコードに欠陥があるようです。私にはできないので、他の誰かが私の間違いを見つけることができるかどうか疑問に思いました。私が得る出力は単純に[2]であり、これは私のメインループが機能しないことを意味します。私はJavaを始めたばかりなので、詳細な回答をいただければ幸いです。
私のコード:
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;
}