2

嘿伙计们,我有考试测试我 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的?这根本没有任何意义。

4

5 回答 5

4

完全不清楚您的期望是什么,但看看会发生什么:

  • i从1开始。1小于等于10,所以进入循环体
    • 循环体什么都不做
    • 在循环体结束时,i递增 2
  • i现在的值为 3。3 小于或等于 10,所以它进入循环体
    • 循环体什么都不做
    • 在循环体结束时,i递增 2
  • i现在有值 5。5 小于等于 10,所以它进入循环体
    • 循环体什么都不做
    • 在循环体结束时,i递增 2
  • i现在有值 7。7 小于等于 10,所以它进入循环体
    • 循环体什么都不做
    • 在循环体结束时,i递增 2
  • i现在有值 9。9 小于等于 10,所以它进入循环体
    • 循环体什么都不做
    • 在循环体结束时,i递增 2
  • i现在的值为 11。11小于或等于 10,因此循环终止
  • 的值1被打印出来 - 它仍然是 11
于 2013-03-05T00:28:15.743 回答
3

循环的最后一次迭代是 when i = 9。循环终止i += 2,它将给你i = 11.

于 2013-03-05T00:27:37.723 回答
1

本质上,由于循环遍历结果的方式,您的循环无法终止。

你的价值i = 1

问题是你放了i += 2.

这会导致问题的原因是因为它会像这样遍历您的所有值:

  • i = 1i <= 10:循环失败将继续。
  • i = 3:因为您i <= 10仍然不符合条件而失败,循环仍然迭代。
  • i = 5: 因i <= 10未满足而失败,循环继续。
  • i = 7: 因i <= 10未满足而失败,循环将继续。
  • i = 9: 失败,因为您i <= 10仍然不符合您的标准。

由于最后一次迭代失败,它实际上又运行了一次。如果您尝试让循环运行一定次数,则必须使用更简洁的数学表示来正确迭代。它不会i <= 10在所需的次数内平衡,因此会导致额外的一次迭代。

但这就是为什么它是 11,因为你的最后一个值不符合条件。

现在,如果您希望循环进行五次,您需要这样的东西:

int i;
for(i = 1, i <= 5, i +=1 );

你也可以像这样完成它:

int i;
for(i = 5, i <= 20, i += 5);

我不确定这是否是您使用不同数字的最初目标,但希望这会有所帮助。我可能会添加错误,但希望这会为您指明正确的方向。

于 2013-03-05T00:37:25.797 回答
0

如果将消息框放在循环内:

int i;
for (i = 1; i <= 10; i += 2)
{
  MessageBox.Show("The number is " + i);
}

那么你会得到五个消息框,其值为 1、3、5、7 和 9。

由于消息框在循环之后,您会得到一个消息框,其中包含变量在循环之后的值,即 11。

于 2013-03-05T00:34:44.030 回答
0

for循环从 开始,i一直1加到2,当大于i时停止。这是第一次发生在,所以循环退出并静止。i10i == 11i11

于 2013-03-05T00:28:06.527 回答