一个用java流中的filter求区间[a, b)的素数和的程序

img

img


如上图所示,运行时异常,谁能帮忙看一下,这是怎么回事?我看不懂


import java.util.stream.IntStream;

public class PrimeNumberSum {
    public static void main(String[] args) {
        int a = 1; // 起始值
        int b = 100; // 终止值(不包含)

        int sum = IntStream.range(a, b)
                .filter(PrimeNumberSum::isPrime)
                .sum();

        System.out.println("区间[" + a + ", " + b + ")的素数和为:" + sum);
    }

    // 判断一个数是否为素数
    private static boolean isPrime(int number) {
        if (number <= 1) {
            return false;
        }

        for (int i = 2; i * i <= number; i++) {
            if (number % i == 0) {
                return false;
            }
        }

        return true;
    }
}

在上述代码中,我们使用IntStream.range(a, b)创建了一个从a到b-1的整数流,然后使用filter方法传入判断素数的方法isPrime,对流中的元素进行筛选,保留素数。最后使用sum方法计算筛选后的素数的和。

注意,在判断素数的方法isPrime中,我们从2开始遍历到平方根(i * i <= number),如果找到能整除的数,则表示该数不是素数。

你可以根据需要修改起始值a和终止值b来计算不同区间的素数和。

你在这不能强转类型

img


我觉得你是new错了,filter最后拿到boolean判断,你看看这个

img