Java 将素数存储到部分数组中
我试图将所有素数1-100存储到一个部分数组中,然后打印结果 我需要用不同的方法来处理它们 我想我知道了如何判断一个数字是否为素数,但没有知道如何将该数字返回到主方法以存储到数组中 以下是我目前的代码: 主要方法:Java 将素数存储到部分数组中,java,Java,我试图将所有素数1-100存储到一个部分数组中,然后打印结果 我需要用不同的方法来处理它们 我想我知道了如何判断一个数字是否为素数,但没有知道如何将该数字返回到主方法以存储到数组中 以下是我目前的代码: 主要方法: public static void main (String[] args) throws IOException { int[] primeArray = new int[25]; primeArray[0] =2; int numPrimes = 1;
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]);
}
}
publicstaticvoidmain(字符串[]args)引发IOException{
int[]primeArray=新的int[25];
素数数组[0]=2;
int numPrimes=1;
布尔素数;
整数;
对于(currNumber=3;currNumber代码中的一些错误。在main方法中,您将currNum
传递到isPrime()中
method调用。该变量不存在,您的代码不应该编译。您希望将currNumber
传递到该方法调用中。第二件事是if语句将“prime”布尔值赋值为true,而不是检查它。它应该是if(prime)
在isPrime()
方法中,可以在素数检查中添加一个break;
,因为如果它可以被一个数字整除,它就不是素数,无需检查其余的除数:
if(currNum%primeArray[i]==0) {
prime = false;
break;
}
由于您正在遍历素数数组,因此for循环应该在素数的数量处停止,而不是在当前的数量处停止:
for(int i=0; i<numPrimes; i++)
for(int i=0;i您做得很好,我可以马上看到几个错误:
if(prime=true)
应该是if(prime==true)
或者对于布尔型,通常只使用表达式,即if(prime)
检查检查素数的循环。x%1将始终为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;
}
public静态布尔值isPrime(整数){
如果(数字<2){
返回false;
}否则如果(数字<4){
返回true;
}
对于(int i=2;i如果您已经以currNumber
的形式将数字返回到main方法,为什么您需要“将数字返回到main方法”?这不是问题的答案,但您可能希望查看Eratosthenes的筛选:我会将isPrime
签名更改为公共静态布尔isPrime(int number)
。提示不要给变量命名prime
,尤其是当它们是booleans
时,请使用以下内容:isPrime
告诉我们这个变量的值可以是真/假。对于其他程序员来说,更容易阅读。如果你把它保持为prime
,有人可以通过浏览你的代码来假设prime
的值就是一个质数。你所说的“部分数组”是什么意思?我还想再添加一个条件:currNum/2我更新了上面的代码。.它编译得很好,但现在我得到了ArrayIndexOutofBounds错误。我知道原因,但不知道如何修复它。检查异常以找到获得该异常的行号。但在不知道的情况下,我猜这是因为您的primeArray[]
只能容纳25个整数,而1到100之间有25个以上的素数。因此,要么增大该数组,要么在找到25个素数时停止。这很有意义,我在得到25个素数时停止了该数组。现在我想打印数组,所以我打印出“System.out.print(primeArray[numPrimes])对吗?我这样做,但它只是打印出所有0。您需要编写一些代码来打印数组中的每个素数,System.out.print(primeArray[numPrimes])不起作用。这似乎更容易,但这是我被要求的方法。
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;
}