[英]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.