Java-8在给定范围内的质数

时间:2019-09-17 09:39:07

标签: java java-8

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

我的代码如下:

/VSCode

/VSCode/C++ 
/VSCode/C++/ProjectA 
/VSCode/C++/ProjectB

/VSCode/Python 
/VSCode/Python/Project1 
/VSCode/Python/Project2

输入如下:

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

1 个答案:

答案 0 :(得分:4)

您有两个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管道(产生List)是不必要的。