[英]Javascript for loop not behaving as I expected
因此,代碼非常簡單,不必擔心isPrime
函數。 在我的findPrime
函數中,設置迭代器: primeCnt = 0
。 然后,我進入一個for循環,其中我的條件是primeCnt <= max
,其中max = 10001
。 i
在我的for循環中不是迭代器。 我用i
來產生質數。
我的for以primeCnt == 10002
結尾,但是當primeCnt = 10001
時,for退出。 如果將for條件更改為primeCnt < max
,則可以獲得所需的預期結果,但是for條件應為primeCnt <= max
。
更新
這只是常規的for循環,我只是在思考問題,就像任何以零開始的迭代器一樣,您想說string.length或max值,當for比較為時,出口將為= string.length。 <
並且如果使用<=
比較,它將是string.length之上的一個。 這只是循環的一個好地方,我很累並且想不通。
與C#和C ++等C語言相比,for循環條件比較指令“觸發”時,我的大腦在哪里出了問題?
function findPrime() { var max = 10001; var lastPrime = 0; var primeCnt = 0; for (var i = 0; primeCnt <= max; i++) { if (isPrime(i)) { lastPrime = i; primeCnt++; } } console.log(primeCnt); return lastPrime; } function isPrime(value) { for (var i = 2; i < value; i++) { if (value % i === 0) return false; } return value > 1; } console.log(findPrime());
當然primeCnt == 10002; 這就是循環退出的原因。 它的最后一次運行是primeCnt == 10001,此后primePnt又增加了一次,條件失敗,循環結束。 順便說一下,這與在C ++和C#等語言中工作的方式相同。 JavaScript也是一種“ C風格語言”,即使它有明顯的不同。
我最初將此版本發布為評論,但這確實是一個答案,因此我將其發布為一個。
在代碼的最后一次迭代中,開始時您的primeCnt等於10001。這時,它將運行代碼塊,其中一部分包括將primeCnt增加1。因此,在最終迭代運行之后,您的primeCnt為10002。
因此,讓我們解釋一下您自己的代碼。
(var i = 0; primeCnt <= max; i++)
等於:
var i = 0;
if (primeCnt <= max)
{
i++;
}
因此,當i=10001
, 10001 <= 10001
,將i
遞增到10002
。
如果希望表達式<=
,則將最大值設置為10000
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.