我正在尝试编写一个显示从0到100的素数的脚本,但是当我执行它时,浏览器会崩溃。 JSHint没有发现任何错误。
我想学习为什么这段代码不起作用:我不想找到完全相同的任务的完全不同的代码(like this one)。
这是我写过的第一个代码,所以我提前为我忽略的所有愚蠢错误道歉。
var i;
var m;
var primeArr = [2, 3, 5, 7, 11, 13, 17, 19];
var theMaxNumber = 100;
var theMinNumber = 21;
var theCounter = -1;
function myFunction() {
for (i = theMinNumber; i < theMaxNumber; i += 2) {
for (m = 0; m < primeArr.length; m++) {
if (i % primeArr[m] !== 0) {
theCounter++;
if (theCounter === primeArr.length) {
primeArr.push(i);
}
if (m === primeArr.length) {
theCounter = -1;
}
}
}
}
console.log( primeArr.toString());
}
这是理论上应该如何运作的:
1)该函数判断数字 i 是否可以对小于其本身的素数进行整除。
2)如果是, theCounter 被重置, i 增加2。
3)如果不是, theCounter 增加1。如果,在循环结束时, i 对于所有小于其自身的素数都不是可分数的,这意味着它是素数: i 被推入数组中(因为 theCounter = == primeArr.length),然后 i 增加2。
编辑:我修复了代码中的所有错误,现在效果很好:
var i;
var m;
var primeArr = [3, 5, 7, 11, 13, 17, 19];
var theMaxNumber = 100;
var theMinNumber = 21;
var theCounter = 0;
function myFunction() {
for (i = theMinNumber; i < theMaxNumber; i += 2) {
theCounter = 0;
for (m = 0; m < primeArr.length; m++) {
if (i % primeArr[m] !== 0) {
theCounter++;
}
if (theCounter === primeArr.length) {
primeArr.push(i);
}
}
}
primeArr.unshift(2);
console.log( primeArr.toString());
}
答案 0 :(得分:0)
你的停止条件是错误的内部for循环它有一个无限循环增加primeArr永远直到它崩溃JS引擎。 添加“警报”或“调试器”命令以查看问题
for (m = 0; m < primeArr.length; m++) {
if (i % primeArr[m] !== 0) {
theCounter++;
if (theCounter === primeArr.length) {
primeArr.push(i);
}