2017-02-20 10 views
-1

私はJSには新しいので、私のコードのほとんどはうまくいきませんでした。私はすべての素数を見つけるためのプログラムを作ったが、それを使うたびにクラッシュする。実行中にこのコードをクラッシュさせないようにする方法はありますか?無限ループfor((;;))をクラッシュさせる方法はありますか?

var i = 0; 

for (;;) { 
    if (i % 2 === 0 || i % 3 === 0 || i % 5 === 0 || i % 7 === 0) { 
     i++; 
    } 
    else { 
     return i; 
     i++; 

    } 
} 
+1

これは素数の正しいアルゴリズムではありません。あなたのコードの中の '121'は、関数の外で素数 –

+3

' return'と見なされますか? –

+2

'' return'文の後に 'i ++'が意味を持たない –

答えて

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 
} 

一致が検出されると、このコンソールに値を出力します(これは、すべての第2のチェックを行います)。しかし、これはsetInterval関数の2番目のパラメータで調整できます。

結果を実際のページに表示する場合は、console.log()をdocument.createTextNode()に置き換えることができます。

また、私はこれをチェックせず、アルゴリズムが正しいかどうかを知りません。ちょうどあなたのコードから適応。修正の

0

一覧:

  • 手動iを更新し、代わりに通常のforループを使用しますが、中間の状態は常に(whileループはまたここで使用することができtrueを返したのforループのブランクを使用し、停止を計画していないので手動でiを更新する必要があります)。しかし、実際には、@ Leonel Atencioのように、ループの代わりに全体をタイマーに入れることができます。
  • 関数の外でreturnを使用しています。このコードを関数の中に入れた場合、毎回最初の素数が返されますので、常に1を返します。
  • 数式が正しくない、素数のいくつかの例を確認するだけです。 @ Alexandru-Ionut Mihaiが言っているように、11x11であっても、121は素数とみなされます。固定

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>

関連する問題