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 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
解决方案
你有两个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
)不是必需的。
推荐阅读
- swift - 使用未解析的标识符“kCAFillModeForwards”
- c# - 使用 Okta 登录 ASP.NET Core 后将用户重定向到默认页面
- django - 带有heroku的django项目:应用程序错误
- java - 在坐标系中定义三角形的高度
- android - 将 SpotBugs 添加到我的项目中
- python - 如何在视图中访问模型中的字段?
- ruby-on-rails - 我可以在 rails activerecord 中自定义字段设置吗?
- windows - 如果在您的文件夹中更改/创建了某些内容,则通知
- artifactory - 如何使用 REST API 更新工件中项目的属性
- drop-down-menu - 在选择框上保存 TYPO3 中的 TCA 更改