我正在尝试将所有素数1-100存储到部分数组中,然后打印结果。
我需要在不同的方法中使用它们。
我想我想出了如何判断一个数字是否为素数,而不是如何将该数字返回给要存储到数组中的main方法。
到目前为止,这是我的代码:
主要方法:
public static void main (String[] args) throws IOException {
int[] primeArray = new int[25];
primeArray[0] =2;
int numPrimes = 1;
boolean prime;
int currNumber;
for(currNumber=3; currNumber<=100; currNumber++) {
prime= isPrime(currNumber,primeArray,numPrimes);
if(prime=true) {
primeArray[numPrimes]=currNumber;
numPrimes++;
if (numPrimes==25)
break;
}
System.out.println(primeArray[numPrimes]);
}
}
isPrime方法:
public static boolean isPrime (int currNum, int [] primeArray,int numPrimes) {
boolean prime=true;
for(int i=0; i<numPrimes; i++) {
if(currNumber/2%primeArray[i]==0)
prime=false;
break;
}
return prime;
} // end isPrime
任何建议都将受到赞赏;现在非常困惑。
答案 0 :(得分:0)
您的代码有些问题。在main方法中,您将currNum
传递给isPrime()
方法调用。该变量不存在,您的代码不应该编译。您希望将currNumber
传递给该方法调用。第二件事是你的 if 语句将“prime”布尔值赋值为true,而不是检查它。它应该是if(prime)
。
在isPrime()
方法中,您可以在素数检查中添加break;
,因为如果它可以被数字整除,则它不是素数,不需要检查其余的除数:
if(currNum%primeArray[i]==0) {
prime = false;
break;
}
由于您正在遍历素数数组,因此for循环应停止在素数的数量,而不是当前数字:
for(int i=0; i<numPrimes; i++)
答案 1 :(得分:0)
你做得很好,我马上就能看到一些错误:
if(prime=true)
应为if(prime==true)
,或者对于通常只使用表达式的布尔值,即if(prime)
检查您检查原始状态的循环。 x%1将始终为0;)
答案 2 :(得分:0)
我会将isPrime
签名更改为public static boolean isPrime(int number)
并定义它,以便根据数字是否为素数而取一个数字并返回true / false。
public static boolean isPrime(int number) {
if(number < 2) {
return false;
} else if(number < 4) {
return true;
}
for(int i=2; i<=number/2; i++) {
if(number % i == 0) {
return false;
}
}
return true;
}