为什么以下javascript会导致无响应脚本错误?
尝试以下代码作为Euler项目问题5的解决方案时。问题是找到一个最小的数,它可以被1到20之间的所有数等分。每次运行时,它都会显示“无响应脚本”窗口,我需要实际停止脚本运行。似乎是什么原因导致它挂起来了,但我不太明白是什么原因。“警报”窗口似乎指向while()开始的那一行出现错误,但我看不出有任何问题。如果它看起来可以工作,我希望有人在他们的机器上尝试一下,看看它是否工作。这样我就可以把它作为一个局部问题来解决。欢迎所有建议为什么以下javascript会导致无响应脚本错误?,javascript,for-loop,while-loop,Javascript,For Loop,While Loop,尝试以下代码作为Euler项目问题5的解决方案时。问题是找到一个最小的数,它可以被1到20之间的所有数等分。每次运行时,它都会显示“无响应脚本”窗口,我需要实际停止脚本运行。似乎是什么原因导致它挂起来了,但我不太明白是什么原因。“警报”窗口似乎指向while()开始的那一行出现错误,但我看不出有任何问题。如果它看起来可以工作,我希望有人在他们的机器上尝试一下,看看它是否工作。这样我就可以把它作为一个局部问题来解决。欢迎所有建议 var divisible = false; var n = 252
var divisible = false;
var n = 2520; // first number divisible by all numbers 1-10
while(divisible === false){ // something wrong here??
n += 2520;
for(var i = 11; i < n; i++) {
if(i % n !== 0){
break;
}
if(i === 20) {
divisible === true;
}
}
}
if(divisible === true){
return console.log("Answer: " +i);
}
var divisible=false;
变量n=2520;//可被所有数字1-10整除的第一个数字
而(可除===false){//这里有什么问题吗??
n+=2520;
对于(变量i=11;i
因为如果i%n
不是第一次为0,您就打破了for
循环。而且你从来没有将可除性设置为true
-可除性===true
与可除性=true
不一样,因为如果i%n
不是第一次为0,你就中断了for
循环。而且你从未将可除性设置为真-可除性===真与可除性=真在原始代码中有几个错误,一些错误在上面的答案中指出。要使它工作,需要几个修复程序。
首先,必须使用for循环
中的赋值运算符=
将布尔值可除
正确设置为真
,而不是=
,后者仅用于检查两个值是否严格属于同一类型和值。
下一个问题是for循环的条件部分i
应该是i<20
,因为循环正在检查11到20之间的数字是否平均划分为n
。使代码正确运行的最后一个修复方法是条件的顺序,如果第一个if
语句应该读取if(n%i!==0)
而不是如果(i%n!==0)
。我认为这可能是导致代码崩溃并在浏览器中生成“无响应脚本”警报的特定部分。
这是固定代码
var divisible = false;
var n = 2520; // smallest number divisible by all numbers 1-10
while(divisible === false){
n += 2520; // increment n on each new pass
// loop numbers between 11 and 20
for(var i = 11; i <= 20; i++) {
if(n % i !== 0){ // check if i divides equally into n
// if not break out of current loop and start again
break;
}
// if i reaches 20 then all the numbers divided equally into n
if(i === 20) {
// set value of divisible to true to cancel while loop
divisible = true;
}
}
}
// return the last value of n
return console.log("Answer: " +n);
var divisible=false;
变量n=2520;//可被所有数字1-10整除的最小数
while(可除===false){
n+=2520;//每次新传递时增加n
//循环编号介于11和20之间
对于(var i=11;i原始代码中有几个错误,上面的答案中指出了一些错误。要使其正常工作,需要几个修复程序。
首先,必须使用for循环
中的赋值运算符=
将布尔值可除
正确设置为真
,而不是=
,后者仅用于检查两个值是否严格属于同一类型和值。
下一个问题是for循环的条件部分i
应该是i<20
,因为循环正在检查11到20之间的数字是否平均划分为n
。使代码正确运行的最后一个修复方法是条件的顺序,如果第一个if
语句应该读取if(n%i!==0)
而不是如果(i%n!==0)
。我认为这可能是导致代码崩溃并在浏览器中生成“无响应脚本”警报的特定部分。
这是固定代码
var divisible = false;
var n = 2520; // smallest number divisible by all numbers 1-10
while(divisible === false){
n += 2520; // increment n on each new pass
// loop numbers between 11 and 20
for(var i = 11; i <= 20; i++) {
if(n % i !== 0){ // check if i divides equally into n
// if not break out of current loop and start again
break;
}
// if i reaches 20 then all the numbers divided equally into n
if(i === 20) {
// set value of divisible to true to cancel while loop
divisible = true;
}
}
}
// return the last value of n
return console.log("Answer: " +n);
var divisible=false;
var n=2520;//可被所有数字1-10整除的最小数字
while(可除===false){
n+=2520;//每次新传递时增加n
//循环编号介于11和20之间
对于(var i=11;感谢您指出这些明显的错误。我当然发现了一些其他错误,例如循环条件中的n
而不是20
。真不敢相信我错过了!但是,中断
是为了在为n
的每个新值找到第一个不可除数字时取消循环。如果i
达到20的值,我们知道所有的数字都被等分为n
的值,因此可以将可除的设置为true并返回n
。我相信它现在可以按预期工作,所以我将在下面的回答中发布工作代码。感谢您指出这些明显的错误。当然,我还发现了一些其他的循环,比如循环条件中的n
而不是20
。真不敢相信我错过了!但是,break
是为了在为n
的每个新值找到第一个不可整除的数字时取消循环。如果I
的值达到20,我们就知道所有的数字在该迭代中被平均划分为n
的任何值,因此可以将可除
设置为true并返回n
。我相信它现在可以按预期工作,因此我将在下面的回答中发布工作代码。