为什么我的javascript for循环没有做任何事情,而是冻结了我的网页?
我很难弄清楚为什么我的代码不能工作。这是一个非常简单的程序,所以我肯定有一些东西我遗漏了或没有看到,但我似乎无法理解。请帮忙 它应该做的是:取两个数,找出下一个大于第一个数的数,也可以被第二个数整除 发生了什么:它基本上只是冻结了我的电脑,似乎循环只是继续运行,没有停止 JS: HTML:为什么我的javascript for循环没有做任何事情,而是冻结了我的网页?,javascript,loops,if-statement,dom,Javascript,Loops,If Statement,Dom,我很难弄清楚为什么我的代码不能工作。这是一个非常简单的程序,所以我肯定有一些东西我遗漏了或没有看到,但我似乎无法理解。请帮忙 它应该做的是:取两个数,找出下一个大于第一个数的数,也可以被第二个数整除 发生了什么:它基本上只是冻结了我的电脑,似乎循环只是继续运行,没有停止 JS: HTML: 让我们算算吧! 输入两个数字,让我们算出下一个 大于这两个数字的数字,但有一个捕获… 这个数字必须能被你选择的第二个数字整除。 第一个号码: 第二个号码: 去 您正在为(var i=fi
让我们算算吧!
输入两个数字,让我们算出下一个
大于这两个数字的数字,但有一个捕获…
这个数字必须能被你选择的第二个数字整除。
-
第一个号码:
-
第二个号码:
-
去
您正在为(var i=firstNum+1;i>firstNum;i++)使用
,并且此条件将始终满足。因此,它将无休止地循环
试试这个:
for (var i = firstNum + 1; ; i++) {
if (i % secondNum === 0) {
document.getElementById('result').innerHTML = I;
break;
}
}
问题:问题是您的条件语句,因为循环总是
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循环设置中的限制几乎与上面的解决方案相同(或者在你的
循环中为设置条件为i,通过执行i++
,你不断增加i
。你告诉它在i>firstNum
时继续运行。它永远不会停止。也许你是想使用i,我最终使用了一个while循环,我做了firstNum%secondNum!=0,然后增加了i,谢谢你。)或者您的帮助!@BLEXT当输入的firstNumber
大于2*secondNumber
时,该循环将无法达到功能目的,例如:firstNumber=12
和secondNumber=4
循环现在甚至不会以12开始,当您想到它时,它只会给出2*secondNum>的答案
并且只有在firstNum
大于secondNum
的一半的情况下,通过额外计算loop.yes,我们才能删除该条件并使用break
for (var i = firstNum + 1; ; i++) {
if (i % secondNum === 0) {
document.getElementById('result').innerHTML = I;
break;
}
}
// 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;
}
// 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;
}
}
}
// 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;
}