在Javascript中达到限制之前的奇数总和

在Javascript中达到限制之前的奇数总和,javascript,loops,for-loop,Javascript,Loops,For Loop,当我回答一个题为“将奇数从1添加到20”时,我将其编码为: var i,和=0; for(i=2;i问题在于您没有更新for循环中的i的值 我想把1到20之间的奇数相加 然后需要将i的初始值更改为1 var i,和=0; 对于(i=1;i你可以,你只需要按照你写的关于求和的内容来做 您在那里使用了i+=2,而不是i+2 同样的方法就是将i*2更改为i*=2 下面是一个工作示例 var i,和=0; 对于(i=2;i您可以在循环头中使用任何表达式,即使对于(;;)这是一个有效的for循环语句,

当我回答一个题为“将奇数从1添加到20”时,我将其编码为:

var i,和=0;

for(i=2;i问题在于您没有更新for
循环中的
i
的值

我想把1到20之间的奇数相加

然后需要将
i
的初始值更改为
1

var i,和=0;

对于(i=1;i你可以,你只需要按照你写的关于求和的内容来做

您在那里使用了
i+=2
,而不是
i+2

同样的方法就是将
i*2
更改为
i*=2

下面是一个工作示例

var i,和=0;

对于(i=2;i您可以在循环头中使用任何表达式,即使对于(;;)
这是一个有效的for循环语句,它只会永远运行(相当于
while(true)


问题是您没有更新
中的
i
计数器(i=2;i您正在查找的是:

let sum=0;

for(var i=2;i如果需要将奇数从1添加到20,则需要将
i+=2
作为for的第三个参数,并需要将变量初始化为1以获得正确的结果:

var sum = 0;
for (var i = 1; i <= 20; i += 2) {
    sum += i;
}
i*2
计算的值是
i
的两倍,但它不会改变
i
的值,因此这将“起作用”:

不仅计算两倍于
i
的值,而且还将结果存储到
i
中。但是,即使运行此操作,结果也不会正确,因为您使用了错误的公式

此外,您还可以计算结果,而无需对
使用

1+2+…+n=n*(n+1)/2

假设n是成对的:因为我们知道我们“缺少”了一半的数字,而且所有的成对数字都比前面的数字大1,所以我们可以减去序列的一半

n*(n+1)/2-n/2=(n*(n+1)-n)/2=(n*(n+1-1))/ 2=n*n/2

现在我们得到了我们需要的两倍值,所以最后的公式是:

sum = n * n / 4;
让我们把它变成一个
函数

function getOddSumUpTo(limit) {
    if (limit % 2) limit ++;
    return limit * limit / 4;
}
然后:

var sum = getOddSumUpTo(20);

请注意,如果是奇数,我们会增加限制。

为什么不尝试在循环中使用
console.log(“i is:,i)
?每次将i乘以2都不是问题,但您没有得到预期的输出。下一个奇数是
oddNumber+2
而不是
oddNumber*2
为什么您甚至尝试使用
*
?您已经说过了“将奇数从1添加到20”表示您希望将2添加到
i
,而不是每次将
i
乘以
2
。“将奇数从1添加到20”通过在
2
处启动
i
,您将错过
1
(i=2;我想如果我只是在循环中写‘i’,它会随着数字的增加而不断更新。那么,我能这样理解吗?:每次在for循环中,我都需要为它们中的每一个给出一个值。@CalebHyun,在for循环中,你必须指定
计数器
,这就引出了我们需要更新i
变量。但这个循环仍然添加偶数而不是奇数:)@KrzysztofJaniszewski,对不起,我的错误。更新了答案。谢谢Krzysztof,对不起,问题是合并偶数,我写错了。我想知道循环中的-为什么(i=1;我很高兴你的回答很好。我也发现了类似的公式用于这种练习。@MihaiAlexandru Ionut Am vazut-o deja,我已经投了更高的票。哇,我完全明白了。谢谢你,Lajos!@CalebHyun,不客气。你可以接受答案。我认为我和Ionut的答案都是正确和有用的。@LajosArpad我不认为你的答案是正确的swer是可以接受的。为什么getOddSumUpTo(21)的分数是100.25?奇数之和怎么能得到0.25的分数?
sum = n * n / 4;
function getOddSumUpTo(limit) {
    if (limit % 2) limit ++;
    return limit * limit / 4;
}
var sum = getOddSumUpTo(20);