任何人都可以看到我的程序中的无限循环在哪里?

时间:2013-02-24 03:46:33

标签: java infinite-loop

这个程序的目的是找到可被整数1到20整除的最小数字。我知道它可以提高效率,但我现在对它的优化不感兴趣。当我执行程序时,它似乎永远挂起,这让我相信某处有一个无限循环。我似乎无法找到它。我不确定代码的哪一部分导致问题,而且相对简洁,所以我会在这里发布。

public class Problem5{
  public static void main(String[]args){

    boolean notFound = true;
    while(notFound){
      int n = 20;
      if(testDivide(n)){
        System.out.println(n);
        notFound = false;
      }
      else
        n++;
    }
  }

  private static boolean testDivide(int target){
    for(int i = 20; i > 0; i--){
      if(target % i != 0)
        return false;
    }
    return true;
  }
}

如果有人可以帮我解决这个问题,我会非常感激。

附加信息:该程序也从不输出任何数字,这使我相信if(testDivide(n))永远不会评估为真。

4 个答案:

答案 0 :(得分:2)

boolean notFound = true;
while(notFound){
    int n = 20;

应该是

boolean notFound = true;
int n = 20;
while(notFound) {

答案 1 :(得分:2)

您正在将while循环中n的值初始化为20,因为n对于testDivide(20)始终为20,因为20 % 19 != 0将始终返回false }返回false。因此,从while循环中删除int n = 20

答案 2 :(得分:1)

你的for循环确保你返回false,然后你的while循环总是将i设置为20这是你的无限循环。

答案 3 :(得分:1)

请参阅while循环:

while(notFound){
      int n = 20;
      if(testDivide(n)){
        System.out.println(n);
        notFound = false;
      }
      else
        n++;
    }

首先执行while循环时,n的值设置为20
测试分数返回false n的值减少为19 循环再次执行
n的值重新初始化为20 这是在n循环之外初始化while的问题。