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())
…