我正在编写一个程序,计算给定范围内的素数。
我的代码如下:
/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
答案 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
)是不必要的。