我是JS的新手,所以我的大部分代码都没有用。我已经制作了一个程序来查找每个素数,但每次使用它时,它都会崩溃。有没有办法让这段代码在运行时不会崩溃?
var i = 0;
for (;;) {
if (i % 2 === 0 || i % 3 === 0 || i % 5 === 0 || i % 7 === 0) {
i++;
}
else {
return i;
i++;
}
}
答案 0 :(得分:1)
正确的方法是使用单个计时器。使用setInterval,您可以按如下方式实现所需:
window.onload = function start() {
primes();
}
function primes() {
var i = 0;
window.setInterval(function () {
if (i % 2 === 0 || i % 3 === 0 || i % 5 === 0 || i % 7 === 0) {
i++;
} else {
console.log(i);
i++;
}
}, 1000); // repeat forever, new value every 1 second
}
一旦找到匹配项,它就会将值打印到控制台(它每秒都会检查一次)。但是你可以在setInterval函数的第二个参数上调整它。
如果您想在实际页面上显示结果,可以使用document.createTextNode()替换console.log()。
另外,我没有检查过这个或知道算法是否正确。刚改编自您的代码。
答案 1 :(得分:0)
修正清单:
i
并使用空白for循环而不是正常使用for循环,但中间条件始终返回true(此处也可以使用while
循环,但仍会需要手动更新i
),因为您不打算停止。但是,实际上你可以把整个事情放在一个计时器而不是一个循环中,就像@Leonel Atencio那样。return
,如果你把这个代码放在一个函数中,它每次都会返回第一个素数,所以它总会返回1
。 / LI>
修正:
var primes = [];
var i = 1; //Start at 2; since "i" is incremented at the start of the function, this won't start it at 1, which would cause problems (the array would only have 1 in it, since all other whole numebrs are divisible by one)
setInterval(primeFunc,100);
function primeFunc(){
i++; //Increment current number
isPrime=true; //Assume prime
for(var j=0;j<primes.length;j++){ //Rule out non-primes with the power of modulo
if(i%primes[j]==0) { //If the current number can be divided (is divisible) by any previous prime...
//...then it's not a prime, so cancel any further chacks and move on
isPrime=false;
break;
}
}
if(isPrime){
//The current number is not divisible by any other primes, so it is itself a prime; if it was divisible, isPrime would be set to false by our loop above
primes.push(i);
output.innerHTML=primes;
}
}
<span id="output"></span>