因此代码非常简单,不用担心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 ++)相比
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;
答案 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=10001
,10001 <= 10001
,i
增加到10002
。
如果您希望表达式为<=
,只需将最大值设置为10000
。