首页 > 解决方案 > Java-8 给定范围内的素数

问题描述

我正在编写一个程序来计算给定范围内的素数数量。

我的代码如下:

public class MultiLineInput {
    static int k=0;
    public static void main (String[] args) {

        Scanner s = new Scanner(System.in);
        int numberOfLinesToRead =  2;//  s.nextInt();
        int []  array = new int [numberOfLinesToRead];
            for(int i=0;i<array.length;i++){
                array[i]=s.nextInt();
            }
        List<Integer> list = IntStream.rangeClosed(array[0], array[1]).boxed().collect(Collectors.toList());
        IntStream.rangeClosed(array[0], array[1]).boxed().map(k -> {
           if(BigInteger.valueOf(list.get(k)).isProbablePrime(1)==true){
               k++;
               return true;
           }
              return false;
        });
        System.out.println(k);

    }
}

输入如下:

1
20

输出:

0

预期输出:

8

标签: javajava-8

解决方案


你有两个k变量。

一个是static你永远不会改变的,所以它仍然存在0

另一个在Stream管道内递增的是局部变量,因此在管道完成后递增它没有任何影响。

此外,您的第二个Stream管道没有终端操作,因此它不处理Stream.

另外,我建议不要在管道内使用副作用(即增加static变量) 。Stream使用filter代替map并计算过滤后的元素数量Stream

long result = IntStream.range(array[0], array[1])
                       .boxed()
                       .filter(n -> BigInteger.valueOf(n).isProbablePrime(1))
                       .count();

请注意,您的第一个Stream管道(产生 a List)不是必需的。


推荐阅读