Java 有人能看到我程序中的无限循环在哪里吗?
这个程序的目的是找到可被所有整数1到20整除的最小数。我知道可以提高效率,但我现在对优化它不感兴趣。当我执行程序时,它似乎永远挂起,这让我相信在某个地方有一个无限循环。但我似乎找不到它。我不确定是哪部分代码导致了这个问题,而且它相对简洁,所以我将把它全部发布在这里Java 有人能看到我程序中的无限循环在哪里吗?,java,infinite-loop,Java,Infinite Loop,这个程序的目的是找到可被所有整数1到20整除的最小数。我知道可以提高效率,但我现在对优化它不感兴趣。当我执行程序时,它似乎永远挂起,这让我相信在某个地方有一个无限循环。但我似乎找不到它。我不确定是哪部分代码导致了这个问题,而且它相对简洁,所以我将把它全部发布在这里 public class Problem5{ public static void main(String[]args){ boolean notFound = true; while(notFound){
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:不客气,继续微笑:-)回想我以前的问题,我意识到我从来没有接受过你的答案!好了,这应该是你的代表。