当尝试下面的代码作为欧拉项目问题的解决方案时5.问题是找到可被1到20之间的所有数字整除的最小数字。每次运行时它都会显示“无响应脚本”窗口和我需要实际停止脚本运行。似乎有什么东西导致它挂起但我无法弄清楚是什么。警报窗口似乎指向while()启动时出现的错误,但我看不出它有什么问题。如果它看起来应该有效,我会感激任何人在他们的机器上尝试它看看它是否有效作品。这样我可以将其作为一个本地问题消除。欢迎所有建议。
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);
}
答案 0 :(得分:4)
因为如果第一次for
不是0,你就会突破i % n
循环。并且您从未将divisible
设置为true
- divisible === true
与divisible = true
答案 1 :(得分:0)
原始代码中存在一些错误,有些错误在上面的答案中指出。为了使其工作,需要几个修复。
首先,必须使用divisible
内的赋值运算符true
而不是=
将布尔for loop
正确设置为===
,i < n
仅用于检查两个值严格地说是相同的类型和值。
下一个问题是for循环i < 20
的条件部分应该是n
,因为循环正在检查11到20之间的数字是否均匀分配到if
。最后一个修复代码正确运行是条件的顺序,如果第一个if(n % i !== 0)
语句应该是if(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);
。我认为可能是这个特定部分导致代码崩溃并在浏览器中生成“无响应脚本”警报。
这是固定代码。
console.log