我试图在checkPrime中返回素数。 checkPrime方法本身必须存在一些错误,我找不到它。该怎么办 ?数组未返回任何值
import java.util.*;
public class addPrimeInArray{
int total=0; int i,j;
int checkPrime(int[] arr){
for(i=0;i<arr.length;i++) {
boolean isPrime=true;
for(j=2;j<arr[i];j++){
if(arr[i]%j==0){
isPrime=false;
break;
}
}
if(isPrime) {
return(arr[i]);
}
}
return(arr[i]);
}
int sum(int[] arr) {
for(i=0;i<arr.length;i++) {
total=total+arr[i];
}
return(total);
}
public static void main(String[] args) {
addPrimeInArray apa = new addPrimeInArray();
int [] numbers = new int[3];
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
for(int i: numbers) {
System.out.print(i+" ");
}
apa.checkPrime(numbers);
apa.sum(numbers);
}
}
答案 0 :(得分:2)
第一个问题是checkPrime
;它应该采用单个值,如果该值是质数则返回true。下面的算法进行了略微优化;我们只需要测试奇数值(检查两个和它的倍数之后)。另外,您的方法都不依赖于类状态,因此我将删除类字段并使方法静态。
static boolean checkPrime(int v) {
if (v == 1 || v == 2) {
return true;
} else if (v % 2 == 0) {
return false;
}
int sq = (int) Math.sqrt(v);
for (int i = 3; i <= sq; i += 2) {
if (v % i == 0) {
return false;
}
}
return true;
}
接下来,如果数字为素数,则sum
方法应迭代该数组并将其添加到总数中(对该值调用checkPrime
)。喜欢,
static int sum(int[] arr) {
int total = 0;
for (int i = 0; i < arr.length; i++) {
if (checkPrime(arr[i])) {
total += arr[i];
}
}
return (total);
}
最后,您可以使用Arrays.toString(int[])
打印数组-然后将数组中的质数求和并显示结果;喜欢,
public static void main(String[] args) {
int[] numbers = { 1, 2, 3 };
System.out.println(Arrays.toString(numbers));
System.out.println("The sum of primes is " + sum(numbers));
}