2013-06-27 52 views
0

這個js程序應該顯示前100個素數,但是每次都會崩潰,而且我找不到錯誤!有人能指出我調試js代碼的最佳方法嗎?!謝謝!在我的javascript代碼中找不到錯誤

// initialisation of the array p holding the first 100 prime numbers 
var p = []; 

// set the first prime number to 2 
p.push(2); 

// find the first 100 prime numbers and place them in the array p 
var i = 3; 
while (p.length < 100) { 
    var prime = true; 
    loop: 
    for (var item in p){ 
     if (i%item === 0){ 
      prime = false; 
      break loop; 
     } 
    } 
    if (prime) 
     p.push(i); 
    i = i + 2; 
} 

// display the first 100 prime numbers found 
var i=1; 
for (var item in p){ 
    document.writeln(i,item); 
    i++; 
} 
+0

使用瀏覽器的調試器?放入一些'console.log()'語句來仔細檢查你的期望?使用紙和筆(cil)來遍歷代碼? –

+0

避免使用標籤聲明https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label 您可以使用break; – Givi

+0

'for(var item in p)'不會做你認爲它做的事。 – Barmar

回答

2

變化:

for (var item in p) { 

到:

for (var i = 0; i < p.length; i++) { 
    item = p[i]; 

for-in遍歷對象或數組,而不是值的密鑰。

+0

「for-in迭代對象或數組的鍵,而不是值」的確是問題!謝謝你,巴爾瑪。 –

1

首先,把你的算法放到一個函數中,並把這個函數放到頁面html中。如:

<html> 
<head> 
<script> 

function test(){ 
// initialisation of the array p holding the first 100 prime numbers 
var p = []; 

// set the first prime number to 2 
p.push(2); 

// find the first 100 prime numbers and place them in the array p 
var i = 3; 
while (p.length < 100) { 
    var prime = true; 
    loop: 
    for (var item in p){ 
     if (i%item === 0){ 
      prime = false; 
      break loop; 
     } 
    } 
    if (prime) 
     p.push(i); 
    i = i + 2; 
} 

// display the first 100 prime numbers found 
var i=1; 
for (var item in p){ 
    document.writeln(i,item); 
    i++; 
} 
} 

</script> 
</head> 
    <body> 
    <a onmouseclick="test()">test</a> 
    </body> 
</html> 

然後在Chrome或Firefox中打開此頁面。

按F12打開調試面板。 然後轉到Sources標籤dans在左側視圖中選擇您的頁面(例如:test.html),並在行var p =[];上進行停止點調試,然後單擊頁面上的鏈接測試開始調試。 F10去另一條線,F11進入方法,F8去下一個停止點。

希望有所幫助。

1

只要改變

if (i%item === 0){ 

if (i % p[item] == 0){ 

那麼它會工作。

jsfiddle

0

這是最後的工作代碼如下所示:

// initialisation of the array p holding the first 100 prime numbers 
var p = []; 

// set the first prime number to 2 
p.push(2); 

// find the first 100 prime numbers and place them in the array p 
var i = 3; 
var item; 
var prime; 
while (p.length < 100) { 
    prime = true; 
    for (item in p){ 
     if (i%p[item] === 0){ 
      prime = false; 
      break; 
     } 
    } 
    if (prime) 
     p.push(i); 
    i = i + 2; 
} 

// display the first 100 prime numbers found 
var s = ""; 
for (item in p){ 
    if (item != p.length - 1){ 
     s = s + p[item] + ","; 
    } 
    else{ 
     s = s + p[item]; 
    } 
} 
alert(s); 
相關問題