嘿,伙计们,我有一个测试,测试for循环的输出。但是我似乎不明白这个输出是怎么变成11的?
public void button1_Click(object sender, EventArgs e)
{
int i;
for (i = 1; i <= 10; i += 2)
{
}
MessageBox.Show("The number is " + i);
}
}之前我认为它代表1+3+5+7+9,但答案不是11。谁能帮我解释一下输出是如何变成11的?这根本没有任何意义。
发布于 2013-03-05 08:27:38
循环的最后一次迭代是when i = 9。循环以i += 2结束,它将为您提供i = 11。
发布于 2013-03-05 08:28:16
完全不清楚您所期望的是什么,但看看发生了什么:
i从1开始。1小于或等于10,所以它进入循环体i递增1
i现在的值是3.3。3小于或等于10,因此它进入循环体i按2递增
i现在的值是5.5。5小于或等于10,所以它进入循环体,当循环体结束时,循环体i被递增。
i现在的值是7. 7小于或等于10,所以它进入循环体,当循环体结束时,循环体i被递增
i现在的值是9。9小于或等于10,所以它进入循环体,当循环体结束时,循环体i被递增。
i现在的值是11.11。11不小于或等于10,所以输出1的循环terminates发布于 2013-03-05 08:37:26
从本质上讲,由于循环遍历结果的方式,它无法终止。
您对i = 1的价值。
问题是你已经把i += 2。
这将导致问题的原因是,它将像这样遍历您的所有值:
i = 1:因您的continue.i = 3:失败i <= 10循环将因i <= 10仍不满足条件而continue.i = 3:失败,循环迭代still.i = 5:因未满足i <= 10而失败,循环continues.i = 7:因i <= 10未满足而失败,循环将因i <= 10仍不满足条件而失败。由于上一次迭代失败,它实际上会在另一次运行。如果您试图让循环运行一定的次数,则必须使用更简洁的数学表示法才能正确迭代。它不会在期望的次数中平衡i <= 10,因此会导致一个额外的迭代。
但这就是为什么它是11,因为你的最后一个值不能满足满足的条件。
现在,如果你想让循环运行五次,你会想要这样的东西:
int i;
for(i = 1, i <= 5, i +=1 );您也可以像这样完成它:
int i;
for(i = 5, i <= 20, i += 5);我不确定这是否是你最初的目标,但希望这会有所帮助。我可能加错了,但希望这能为你指明正确的方向。
https://stackoverflow.com/questions/15213669
复制相似问题