簡體   English   中英

循環的Javascript不符合我的預期

[英]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=1000110001 <= 10001 ,將i遞增到10002

如果希望表達式<= ,則將最大值設置為10000

暫無
暫無

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

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