我想返回一个数组,该数组显示从 0
到我输入的任何数字之间一定范围内的所有素数。
对于从 0
到 5
的范围,我希望使用 [2,3,5]
返回数组。在任务中,我的教授告诉我,我应该用 0
填充整个数组,然后再用素数替换这些 0
。
目前我的代码没有返回正确的数组,因为我似乎没有访问数组中的下一个位置,但似乎总是将值分配给数组中的第一个位置。
我当前的结果数组不是 [2,3,5]
而是 [5,0,0,0,0]
。
任何帮助将不胜感激。
public static int[] generierePrimzahlen(int bis){
int [] myAry = new int[bis];
Arrays.fill(myAry,0);
for(int i=0;i<myAry.length;i++){
for (int nextprime=1; nextprime < bis; nextprime++){
int counter = 0;
// System.out.println(nextprime);
if (istPrimzahl(nextprime)){
myAry[counter] = nextprime;
counter++;
}
}
System.out.print(myAry[i]+" ");
}
return myAry;
}
PS:我有一个功能方法(istPrimzahl),它检查某个数字是否是素数。
最佳答案
问题是您的计数器处于错误的范围内。 所以而不是增加。在第一个 for 循环的每次迭代中,您都声明一个新的计数器。这样当你将素数分配给数组时它就是0。
public static int[] generierePrimzahlen(int bis){
int [] myAry = new int[bis];
// Arrays.fill(myAry,0); // no need, this is already been done at initialization
for(int i=0;i<myAry.length;i++){
int counter = 0;
// adding <= 'nextprime <= bis;' to check also the last number in the range
for (int nextprime=1; nextprime <= bis; nextprime++){
// int counter = 0; wrong scope
// System.out.println(nextprime);
if (istPrimzahl(nextprime)){
myAry[counter] = nextprime;
counter++;
}
}
if(myAry[0] != 0) // to get rid of displaying Zeros
System.out.print(myAry[i]+" ");
}
return myAry;
}
关于java - Java 中的素数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46875331/