这个程序的目的是找到可被整数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))
永远不会评估为真。
答案 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
的问题。