为什么我的while循环不重复?

时间:2012-10-10 15:41:24

标签: javascript while-loop

 var num = [1,1];
 var total = 0;
 var i = num.length;
 do {
    i++;
    num[i] = num[num.length-1] + num[num.length-2];
    total+=num[i];
    console.log(total);
 }
 while(num[num.length] < 4000000);

我一直在为Euler项目工作一两天,希望能够扩展我的知识和实用性。关于第二个问题,我一直在找出一种(坏的)获得斐波纳契序列的方法。但是我的代码将打印“2”到控制台,因为它应该然后停止。我的另一个问题是只使用“while(X IS TRUE / FALSE){DO STUFF}”就行不通了。不知道为什么。

我可能只是犯了愚蠢的错误但有人请赐教我:)

2 个答案:

答案 0 :(得分:3)

num.length将始终比num的最后一个索引大1,即如果num.length为5,num的索引为0到4,{{1} }不存在。

可用的最高索引为num[5],因此请在您的情况下尝试num.length - 1

答案 1 :(得分:2)

您的num数组包含2个元素,因此num.length(以及i)为2. do块中的第1个语句为i++。现在i是3。

您正在设置num[3],这意味着num现在是[1, 1, undefined, 1]

另外,在while,您正在查看num[num.length]。由于数组是零索引的,因此{em>永远不会工作,因为num.length现在是4。

我的建议是:在设置元素后增加i。因此,您推送一个新元素,然后递增长度计数器。

var num = [1, 1],
    total = 0,
    i = 2;  // we already know the length, no need to get it
do {
    // we don't need the i++ here
    num[i] = num[i - 1] + num[i - 2]; // add the last 2 elements to the end
    total += num[i];
    console.log(total);
}
while (num[i++] < 4000000);  // "i++" increments i and returns its old value