显示所有素数,直至达到用户的输入限制

时间:2018-04-17 12:39:37

标签: java

因此我被要求定义一种算法来显示所有素数,直到用户设置的极限。我选择使用嵌套的 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++;
}

1 个答案:

答案 0 :(得分:0)

查看iterator=4iterator2=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++;
}