我正在尝试创建一个while循环,它遍历每个可能的长数字,并将遇到的每个质数添加到质数数组中。由于while循环应该运行到质数的长度为200,因此我希望质数数组中填充前200个质数。取而代之的是我得到了全零。我已经成功地获得了20行,每行10个字符,中间有一个空格。我怎么才能让它们成为真正的质数呢?
public class PrimeGenerator {
public static void main(String[] args) {
long primes[] = new long[200];
while (primes.length > 200){
for(long y = 2; y < Long.MAX_VALUE; y++) {
int primeCounter = 0;
if (isPrime(y) == true){
primes[primeCounter] = y;
primeCounter++;
}
}
}
for (int i = 0; i < 20; i++) {
int primeCounter = 0;
for(int p = 0; p < 10; p++) {
System.out.print(primes[primeCounter] + " ");
primeCounter++;
}
System.out.println();
}
}
public static boolean isPrime(long number) {
if (number % 2 == 0)
return false;
if (number == 2)
return true;
for(int x = 3; x*x <= number; x+=2) {
if (number%x == 0)
return false;
}
return true;
}
}发布于 2016-11-17 15:03:11
primes.length始终为200,因此永远不会进入while循环。
while循环是无用的。只需向for循环添加一个条件,该条件将在整个数组被赋值时退出。还要将primeCounter的初始化移到for循环之外。否则,所有的素数都将被赋值给primes[0]。
long primes[] = new long[200];
int primeCounter = 0;
for(long y = 2; y < Long.MAX_VALUE && primeCounter < 200; y++) {
if (isPrime(y) == true){
primes[primeCounter] = y;
primeCounter++;
}
}
for (int i = 0; i < primes.length; i++) {
System.out.print(primes[i]);
if ((i+1) % 10 == 0)
System.out.println();
}编辑:
正如Sweeper评论的那样,你还应该修复你的isPrime方法,因为它为2返回false:
public static boolean isPrime(long number) {
if (number == 2)
return true;
if (number % 2 == 0)
return false;
for(int x = 3; x*x <= number; x+=2) {
if (number%x == 0)
return false;
}
return true;
}发布于 2016-11-17 15:06:30
这段代码写下来了
long primes[] = new long[200];
while (primes.length > 200){手段
while (200 > 200){或与相同的
while (false){所以你的循环永远不会被执行!
发布于 2016-11-17 15:10:23
因为你做到了:
while (primes.length > 200)并且数组的长度始终是200,您永远不会进入while循环,并且数组中的零即将到来,因为当您创建"long“数组时,它会将其初始化为零
https://stackoverflow.com/questions/40648563
复制相似问题