Javascript for循环不符合我的预期

时间:2015-10-24 03:29:00

标签: javascript

因此代码非常简单,不用担心isPrime功能。在我的findPrime函数中,我设置了迭代器:primeCnt = 0。然后我输入一个for循环,我的条件是primeCnt <= max max = 10001。我的for循环中的i不是迭代器。我使用i生成素数。

我的结尾为primeCnt == 10002,但for应在primeCnt = 10001时退出。如果我将我的for条件更改为primeCnt < max,我会得到我需要的预期结果,但for条件应为primeCnt <= max

更新

它只是一个常规的旧for循环,我只是在考虑事情,就像任何从0开始的迭代器而你想要说string.length或max值,退出将是= string .length用于比较是<,如果你使用<=比较,它将高于string.length。它只是一个很好的循环,我很累,而且在思考它。

我的大脑在这里出了什么问题,或者在for循环条件比较指令&#34; fires&#34;与C风格语言(如C#和C ++)相比

&#13;
&#13;
    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());
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:1)

当然primeCnt == 10002;这就是循环退出的原因。它最后一次运行时是primeCnt == 10001,之后primeCnt再次递增,条件失败,循环结束。顺便说一句,这与C ++和C#等语言的工作方式相同。 JavaScript也是一种C风格的语言,&#34;即使它有明显的差异。

我最初发布了一个版本作为评论,但它确实是一个答案,所以我将其作为一个发布。

答案 1 :(得分:1)

在代码的最后一次迭代中,在开始时,primeCnt等于10001.此时,它运行代码块,其中一部分包括将primeCnt增加1.因此,在最后一次迭代运行后,你的primeCnt是10002。

答案 2 :(得分:0)

所以,让我们解释一下你自己的代码。

(var i = 0; primeCnt <= max; i++)

等于:

var i = 0;
if (primeCnt <= max)
{
    i++;
}

所以,当i=1000110001 <= 10001i增加到10002

如果您希望表达式为<=,只需将最大值设置为10000