簡體   English   中英

為什么這個代碼打印錯誤的素數?

[英]Why this code printing wrong prime numbers?

“我認為問題出在 for 循環中。因為我在兩個函數的循環中都使用了相同的“j”進行迭代。” 我想打印 1-100 的所有素數。 我認為所有代碼都很好。 但它一直顯示 output 而不是素數。

我自己找不到答案。 沒有其他地方有書面答案。 請幫幫我。 我想了解這個問題。

 var n = 100; var prime1 = new Array(); //producing prime number upto 97 function primeNumber() { for (j = 1; j <= n; j++) { if (countRemainder(j) == 2) { prime1.push(j); } } } primeNumber(); console.log(prime1); function countRemainder(n) { var count = 0; for (j = 1; j <= n; j++) { if (n % j == 0) { count++; } } return count; }

截圖數組輸出

問題確實發生了,因為您在兩個for循環中都使用了相同的變量。

當你聲明一個像j = 0;這樣的變量時而不像var j = 0; 該變量將被添加到全局 scope (而不是您所在的 scope,因此其他所有 scope 都可以查看和更改該變量)。

如果您的腳本在嚴格模式下運行,那么這將引發錯誤,而不是將變量添加到全局 scope。

所以只需在每個j聲明之前添加var

 var n = 100; var prime1 = new Array(); //producing prime number upto 97 function primeNumber() { for (var j = 1; j <= n; j++) { if (countRemainder(j) == 2) { prime1.push(j); } } } primeNumber(); console.log(prime1); function countRemainder(n) { var count = 0; for (var j = 1; j <= n; j++) { if (n % j == 0) { count++; } } return count; }

使用“let”正確聲明“j”。

function primeNumber() {
  for (let j = 1; j <= n; j++) {
    if (countRemainder(j) == 2) {
      prime1.push(j);

    }
  }
}

嘗試這個

 var n = 100; var prime1 = new Array(); //producing prime number upto 97 function primeNumber() { for (var j = 1; j <= n; j++) { if (countRemainder(j) == 2) { prime1.push(j); } } } primeNumber(); console.log(prime1); function countRemainder(n) { var count = 0; for (var j = 1; j <= n; j++) { if (n % j == 0) { count++; } } return count; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM