Java-8中给定范围内的素数

Java-8中给定范围内的素数,java,java-8,Java,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

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

我的代码如下:

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
预期输出:

1
20
0
8

您有两个
k
变量

一个是
静态的
,您永远不会更改它,因此它仍然是
0

另一个是在
流中递增的
管道是一个局部变量,因此在管道完成后递增它不会产生任何效果

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

此外,我建议不要在
管道中使用副作用(即增加
静态
变量)。使用
过滤器
而不是
映射
,并计算过滤后的
流中的元素数

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

请注意,您的第一个
管道(它生成一个
列表
)不是必需的。

您不应该命名所有变量
k
。很快你就不知道你在增加哪个
k
,而且永远不要使用像
condition==true这样的东西。只需使用
if(condition)…
,整个数组也就过时了。填充它的代码看起来可以适应不同的大小,但是后续的使用不能用两个以上的数字做任何有用的事情。那么为什么不直接使用
IntStream.range(s.nextInt(),s.nextInt())