为什么我的javascript for loop什么都不做,反而冻结了我的网页



我很难弄清楚为什么我的代码不能工作。这是一个非常简单的程序,所以我确信有些东西我错过了或没有看到,但我似乎无法弄清楚。请帮忙!

它应该做的:取两个数字,找到下一个大于第一个数字的数字,并且也可以被第二个数字整除。

发生了什么:它基本上只是冻结了我的电脑,看起来循环一直在不停地运行。

JS:

function divisibleBy(first, second) {
var firstNum = document.getElementById('firstNumber').value;
var secondNum = document.getElementById('secondNumber').value;
for (var i = firstNum + 1; i > firstNum; i++) {
if (i % secondNum === 0) {
document.getElementById('result').innerHTML = i;
}
}
}

HTML:

<body>
<header>
<h1>Let's Do Some Math!</h1>
<h2>Type in <u>two</u> numbers and let's figure out the next <br>
number greater than those two numbers but with a catch...<br>
the number has to be <u>divisible</u> by the second number you choose.</h2>
</header>
<hr>
<ul>
<li>
<label for="firstNumber">First Number:</label>
<input type="number" id="firstNumber">
</li>
<li>
<label for="secondNumber">Second Number:</label>
<input type="number" id="secondNumber">
</li>
<li>
<button type="submit" onclick="divisibleBy();">GO</button>
</li>
</ul>
<h2 id="result"></h2>
<hr>
</body>

问题:问题是您条件语句对于循环总是true,这会导致无限循环,因此是一个无响应页面。在这种情况下,也没有必要对函数进行论证

解决方案:

这个问题可以用数学方法解决,不需要循环。

// BEST APPROCH
function divisibleBy() {
var firstNum = parseInt(document.getElementById('firstNumber').value);
var secondNum = parseInt(document.getElementById('secondNumber').value);

var result = secondNum*parseInt(firstNum/secondNum+1);
document.getElementById('result').innerHTML = result;

}

但是,如果你真的需要使用循环,这里是解决方案,但请记住,在for loop中,设置限制几乎与上述解决方案相同(或将条件设置为i <= firstNum*secondNum,因为它在遇到解决方案时已经得到了break语句(

// WORST APPROCH
function divisibleBy() {
var firstNum = parseInt(document.getElementById('firstNumber').value);
var secondNum = parseInt(document.getElementById('secondNumber').value);

for (var i = firstNum+1; i <= secondNum*(firstNum/secondNum+1); i++) {
if (i % secondNum === 0) {
document.getElementById('result').innerHTML = i;
break;  
}
}
}

但我建议使用do-While循环,这将更满足这个问题,并忽略在上面的代码中对i的极限进行不必要的计算。

// BEST LOOP/SIMPLE APPROCH 
function divisibleBy() {
var firstNum = parseInt(document.getElementById('firstNumber').value);
var secondNum = parseInt(document.getElementById('secondNumber').value);

do{
firstNum++;
}
while(firstNum%secondNum != 0)
document.getElementById('result').innerHTML = firstNum;
}

您正在使用for (var i = firstNum + 1; i > firstNum; i++),并且此条件将始终满足。正是因为如此,它才不断地循环。

试试这个:

for (var i = firstNum + 1; ; i++) {
if (i % secondNum === 0) {
document.getElementById('result').innerHTML = I;
break;
}
}

最新更新