Java 有人能看到我程序中的无限循环在哪里吗?

Java 有人能看到我程序中的无限循环在哪里吗?,java,infinite-loop,Java,Infinite Loop,这个程序的目的是找到可被所有整数1到20整除的最小数。我知道可以提高效率,但我现在对优化它不感兴趣。当我执行程序时,它似乎永远挂起,这让我相信在某个地方有一个无限循环。但我似乎找不到它。我不确定是哪部分代码导致了这个问题,而且它相对简洁,所以我将把它全部发布在这里 public class Problem5{ public static void main(String[]args){ boolean notFound = true; while(notFound){

这个程序的目的是找到可被所有整数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))
的计算结果永远不会为true

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

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

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

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

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

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

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

请参阅
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


这就是在
while
循环外部初始化
n
的问题。

请参见
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



这就是在
while
循环外初始化
n
的问题。

您确定在所有情况下
notFound
都将设置为false吗?这里有一个提示:这是while循环。您是否尝试过任何调试?您正在将while循环内
n
的值初始化为
20
,因为testDivide(20)的
n
始终为20,因为
20%19!=0
返回
false
。因此,从while循环中删除
intn=20
。哦,这太明显了!真不敢相信我居然没看到!我也问了一个朋友,他也没想到。你们真的很棒,谢谢。你们确定
notFound
在所有情况下都会被设置为false吗?这里有一个提示:这是while循环。你们试过任何调试吗?你们正在将while循环中
n
的值初始化为
20
,因为对于testDivide(20),
n
总是20,由于
20%19!=0
返回
false
。因此,从while循环中删除
intn=20
。哦,这太明显了!真不敢相信我居然没看到!我也问了一个朋友,他也没想到。你们真的很棒,谢谢。我花了很长时间摆弄循环和控制语句上的条件,我完全忽略了这一点。这是一个如此简单的解决方案。非常感谢。但是
20%20=0
因为余数总是零,这将导致for循环将计数器减量1,测试它的终止条件,并且再次
20
将在减量值为
i
的表达式中进行计算,在这种情况下,它将返回false,IMHO。也许是我错过了什么,刚刚醒来,半睁着眼睛回答这个问题:-)@realityChemist:不客气,继续微笑:-)回想我以前的问题,我意识到我从来没有接受过你的答案!好了,这应该是你的代表,谢谢。我花了很长时间摆弄循环和控制语句上的条件,我完全忽略了这一点。这是一个如此简单的解决方案。非常感谢。但是
20%20=0
因为余数总是零,这将导致for循环将计数器减量1,测试它的终止条件,并且再次
20
将在减量值为
i
的表达式中进行计算,在这种情况下,它将返回false,IMHO。也许是我错过了什么,刚刚醒来,半睁着眼睛回答这个问题:-)@realityChemist:不客气,继续微笑:-)回想我以前的问题,我意识到我从来没有接受过你的答案!好了,这应该是你的代表。