2013-06-23 122 views
0

我需要建立一個數組,包括前100張素數,這裏是我的代碼:的Javascript:我如何添加X元素添加到數組

var premier= []; 
var nombre= premier.length; 

function isPrime(n) 
{ 
    if(n < 2) 
    { 
     return false; 
    } 

    for(i=2; i<Math.sqrt(n); i++) 
    { 
     if(n%i===0) 
     { 
      return false; 
     } 
    } 
    return true 
}; 

while(nombre<100) 
{ 
    var j=2 
    if(isPrime(j)==true) 
    { 
     premier.push(j); 
    } 
    j=j+1 
} 

我在Javascript初學者,但我已經測試isPrime函數,即使對於大數字,它也能正常工作。

但是當我運行該程序,我有:

致命錯誤:JS分配失敗 - 加工出來的內存

我覺得這部分是錯誤的:

while(nombre<100) 
{ 
    var j=2 
    if(isPrime(j)=true) 
    { 
     premier.push(j); 
    } 
    j=j+1 
} 
console.log(premier) 

但我可以」 t告訴你爲什麼

+0

您有什麼問題? – SLaks

+1

是否在將數據推入數組之後更新'nombre'的值? – Jacopofar

+2

'isPrime(j)= true'將不會運行。它是無效的,因爲函數調用不能出現在賦值的左側。我假設'=='是想要的,但是*發佈基本上破壞的非解析代碼*是沒有用的;當不包括適當的錯誤信息時,更少。 – user2246674

回答

3

每次循環運行時,您都重複設置j=2,並且您永遠不會更改​​,因此循環將永不結束。請注意,JavaScript通過值設置文字vaues,而不是通過引用,所以nombre = premier.length不會神奇地更新。

此外,形式if(x = true)的語句設定x爲true,然後自動傳遞的條件。在這種情況下,由於x是一個函數調用,所以它的語法無效。

你說這個?

var j = 2; 
while(premier.length < 100) { 
    if(isPrime(j)) premier.push(j); 
    j++; 
} 
+0

非常感謝你,現在它工作正常。 – Sam