【发布时间】:2013-02-24 03:46:33
【问题描述】:
这个程序的目的是找到能被所有整数 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)) 永远不会评估为真。
【问题讨论】:
-
您确定
notFound在所有情况下都会设置为false 吗? -
这里有一个提示:这是 while 循环。
-
你试过调试吗?
-
您在 while 循环中将
n的值初始化为20,因为对于 testDivide(20),n始终为 20,这将始终返回 false,因为20 % 19 != 0返回 @ 987654328@。因此,从您的 while 循环中删除int n = 20。 -
哦,这太明显了!我不敢相信我没有看到!我也问了一个朋友,他也错过了。你们真的很棒,谢谢。
标签: java infinite-loop