因此我被要求定义一种算法来显示所有素数,直到用户设置的极限。我选择使用嵌套的 while 循环但由于某种原因,程序在打印第一个素数后仍然卡住...
我已逐行在纸上进行了这项练习,无法找出问题所在。我感谢任何建议。
这是我的代码:
System.out.println("Display all prime numbers from 3 up to...");
int limit = sc.nextInt();
int iterator = 3, iterator2 = 2;
boolean isPrime = true;
while (limit >= iterator) {
while (iterator > iterator2) {
if (iterator % iterator2 != 0) {
iterator2++;
} else {
isPrime = false;
}
}
iterator2 = 2;
if (isPrime == true) {
System.out.print(iterator + ", ");
}
iterator++;
}
答案 0 :(得分:0)
查看iterator=4
和iterator2=2
:
iterator % iterator2 == 4%2 == 0
第二个循环永远不会停止循环,因为迭代器2永远不会递增。
只需将行iterator2++;
移出if / else块即可。
另外,一旦检查了迭代器的一个值的所有除数,就需要重置isPrime
标志。
如果您没有,一旦找到非素数,该标志将始终设置为false,并且所有后续数字将被标记为非素数。
while (limit >= iterator) {
isPrime = true;
while (iterator > iterator2) {
if (iterator % iterator2 == 0) {
isPrime = false;
}
iterator2++;
}
iterator2 = 2;
if (isPrime == true) {
System.out.print(iterator + ", ");
}
iterator++;
}