import java.util.Scanner;
public class Main {
public static void main(String[] args) {
for(int j = 2; j<=1000; j++) {
boolean yes = true;
for(int i = 2; i<j && yes== true; i++){
if(j%i==0) {
yes=false;
}
System.out.println(j + ":" + yes);
}
}
}
}
到目前为止,我一直在试图弄清楚问题出在哪里,但没有任何答案。
2条答案
按热度按时间fv2wmkja1#
或者,可以使用流来完成您正在尝试执行的操作:
首先生成一个从2到1000(含)的索引,即:。,
IntStream.range(2, 1001)
,将intstream转换为整数(即。,boxed()
),则只过滤那些素数.filter(j -> IntStream.range(2, j).boxed().allMatch(i -> j % i != 0))
,最后将结果打印出来。使用这种管道,就不太可能出现您在原始代码中所犯的错误。
0sgqnhkj2#
你得走了
System.out.println(j + ":" + yes);
在内环外。之所以需要将其移出,是因为只有在内部循环完成之后,才能决定数字是否为素数。旁注:您不需要检查
i < j
. 可能是的i <= Math.sqrt(j)
. 检查https://en.wikipedia.org/wiki/primality_test 了解更多。另外,如果要打印
false
另外,不要使用if (yes) {}
阻止。