我想返回一个数组,显示从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),它会检查某个号码是否为素数。
答案 0 :(得分:1)
问题是您的计数器范围错误。 所以不要增加。在第一个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;
}
答案 1 :(得分:0)
ArrayList是比数组更好的选择。但是,如果使用数组是学校的另一项要求,那么你所做的就是:
int[] myAry = new int[size];
已将所有元素设置为零。
也没有必要为此使用2个循环。只是:
我似乎没有访问数组中的下一个位置,但似乎总是将值赋给数组中的第一个位置。
这是因为您在每次迭代中将计数器变量设置回零。你应该在循环之外声明它。
示例:
int idx = 0; //place this outside the loop
for(int i=1; i<=n; i++)
if(isPrime(i))
myAry[idx++] = i;
答案 2 :(得分:0)
将以下两行放在for循环之外。那可行。 问题的原因是 - 您在进入for循环时重置计数器。
int counter = 0;