0

这个程序的目的是找到能被所有整数 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

4 回答 4

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

应该

boolean notFound = true;
int n = 20;
while(notFound) {
于 2013-02-24T03:55:15.220 回答
3

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

于 2013-02-24T03:55:40.210 回答
1

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

于 2013-02-24T03:58:35.420 回答
1

查看while循环:

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

while一次执行循环时, 的值n设置为20
测试除法返回假。
的值n递减为19
循环再次执行
的值n被重新初始化为20
这是循环n外初始化的问题。while

于 2013-02-24T04:01:25.570 回答