检查数组中的素数并返回素数之和

时间:2019-08-27 04:05:25

标签: java arrays sum primes

我试图在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);
    }
}

1 个答案:

答案 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));
}