2017-03-05 74 views
1

JS的新手。我正在尝试将我的for循环更改为while循环。它打印一个数字的因素,但由于某种原因,while循环导致网页停止响应。任何帮助表示赞赏。将循环更改为while循环崩溃javascript网页?

var num, i = 1, 
 
    array = []; 
 

 
num = parseInt(prompt("Please enter a number:")); 
 

 
while (i < num) { 
 
    if (num % i == 0) { 
 
    array.push(i); 
 
    i++; 
 
    } 
 

 
} 
 
alert("The factors of " + num + " are: " + array + " and " + num);

+0

你可能想给'num'一个值,如果提示没有返回一个数值或者不是一个价值可言,你可能会用'NaN'结束了这也会落入'我 axelduch

回答

4

i移动变量的递增的if条件之外。否则 - 当num不能被指定的i整除时,while循环将被卡住。

例如 - 如果num是5和i是2,循环将被卡住,因为if条件不满足 - 这就是为什么i不会增加 - 然后我们会遇到一个无限循环。

var num, i = 1, array = []; 
 
num = parseInt(prompt("Please enter a number:")); 
 

 
while (i < num) { 
 
    if (num % i == 0) { 
 
     array.push(i); 
 
    } 
 
    i++; 
 
} 
 
alert("The factors of " + num + " are: " + array + " and " + num);

+1

这么简单的xd。谢谢。 – icewolf461

0

你增加i只有当条件 “如果” 块是真的。如果该条件评估为false,则i不能递增,因此该循环永不结束。

if (num % i == 0) { // <some value except 0> % 1 == 0 -> false 
    array.push(i); 
    i++; 
} 

这样试试:

while (i < num) { 
    if (num % i == 0) { 
     array.push(i); 
    } 
    i++; // now i can be incremented regardless of the condition in the "if" block. 
}