Javascript 为什么我的while循环没有重复? var num=[1,1]; var合计=0; var i=数值长度; 做{ i++; num[i]=num[num.length-1]+num[num.length-2]; 总数+=num[i]; 控制台日志(总计); } 而(num[num.length]

Javascript 为什么我的while循环没有重复? var num=[1,1]; var合计=0; var i=数值长度; 做{ i++; num[i]=num[num.length-1]+num[num.length-2]; 总数+=num[i]; 控制台日志(总计); } 而(num[num.length],javascript,while-loop,Javascript,While Loop,我已经在欧拉问题项目上工作了一两天,希望能扩大我的知识面和实用性。关于第二个问题,我一直在想一个(糟糕的)方法来得到斐波那契序列。然而,我的代码会像应该的那样将“2”打印到控制台,但随后会停止。我遇到的另一个问题是,仅仅使用“while(X是真/假){DO STUFF}”是行不通的。不知道为什么 我可能只是犯了一些愚蠢的错误,但请有人告诉我:)num.length将始终比num的最后一个索引大1,也就是说,如果num.length是5,num的索引从0到4,num[5]不存在 可用的最高索引将是

我已经在欧拉问题项目上工作了一两天,希望能扩大我的知识面和实用性。关于第二个问题,我一直在想一个(糟糕的)方法来得到斐波那契序列。然而,我的代码会像应该的那样将“2”打印到控制台,但随后会停止。我遇到的另一个问题是,仅仅使用“while(X是真/假){DO STUFF}”是行不通的。不知道为什么


我可能只是犯了一些愚蠢的错误,但请有人告诉我:)

num.length
将始终比
num
的最后一个索引大1,也就是说,如果
num.length
是5,
num
的索引从0到4,
num[5]
不存在


可用的最高索引将是
num.length-1
,因此请在您的while状态下尝试
num[num.length-1]

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


可用的最高索引将是
num.length-1
,因此请在您的while状态下尝试
num[num.length-1]

您的
num
数组有2个元素,因此
num.length
(还有
i
)是2。
do
块中的第一条语句是
i++
。现在
i
是3

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

另外,在您的
中,您正在检查
num[num.length]
。因为数组是零索引的,所以这永远不会起作用,因为
num.length
现在是4

我建议:在设置元素之后,增加
I
。所以,你推一个新元素,然后增加长度计数器

 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);
var num=[1,1],
总计=0,
i=2;//我们已经知道长度了,不需要知道
做{
//我们这里不需要i++
num[i]=num[i-1]+num[i-2];//将最后2个元素添加到末尾
总数+=num[i];
控制台日志(总计);
}
而(num[i++]<4000000);//“i++”递增i并返回其旧值

您的
num
数组有2个元素,因此
num.length
(还有
i
)是2。
do
块中的第一条语句是
i++
。现在
i
是3

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

另外,在您的
中,您正在检查
num[num.length]
。因为数组是零索引的,所以这永远不会起作用,因为
num.length
现在是4

我的建议是:在设置元素后增加
I
。所以,你推一个新元素,然后增加长度计数器

 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);
var num=[1,1],
总计=0,
i=2;//我们已经知道长度了,不需要知道
做{
//我们这里不需要i++
num[i]=num[i-1]+num[i-2];//将最后2个元素添加到末尾
总数+=num[i];
控制台日志(总计);
}
而(num[i++]<4000000);//“i++”递增i并返回其旧值

斐波那契序列取最后两项,将它们相加,形成下一项。我想我的问题是我的代码没有为术语保留索引,只是没有前进。尝试了你的建议,第二次打印时只得到了NaN。你的代码中也存在逻辑问题
num
以长度2开始,因此
i
在初始化中获取该数字。然后立即在do…while中增加
i
<在while循环的第一次迭代结束时,code>num
将为[1,1,?,1+?]。斐波那契序列将最后两项相加,形成下一项。我想我的问题是我的代码没有为术语保留索引,只是没有前进。尝试了你的建议,第二次打印时只得到了NaN。你的代码中也存在逻辑问题
num
以长度2开始,因此
i
在初始化中获取该数字。然后立即在do…while中增加
i
<在while循环的第一次迭代结束时,code>num
将为[1,1,?,1+?]。看起来您正在尝试执行project euler的问题2。我知道这不是一个答案,但要考虑的是,你可能不需要实际保存所有斐波那契数的数组。数组正在使您的过程复杂化。看起来您正在尝试解决project euler的问题2。我知道这不是一个答案,但要考虑的是,你可能不需要实际保存所有斐波那契数的数组。阵列正在使您的过程复杂化。哈哈!这就成功了。谢谢,伙计,我知道我现在需要做什么了。我不应该去寻找num[3]的答案,而应该询问一个到目前为止数组中实际存在的数字。感谢您指出while循环,我在键入时没有注意到或仔细考虑它:P对于如何利用数组中的对象来获取下一个术语有点困惑。否则,回答很好:)@AlexMorris:在您的数组中有
2
元素(索引
0
1
),因此
num[2]
将向数组中添加第三个元素。:-)我明白了:)经过一些修改,我完成了更多的代码,但遗憾的是,它不正确:((我会继续努力的。哈哈!成功了。谢谢你,我现在可以看到我需要做什么了。而不是去寻找num[3]的答案。)我应该问一个到目前为止在数组中实际存在的数字。谢谢你指出while循环,我没有注意到,也没有仔细考虑