for循环的输出如何工作?

问题描述:

嘿家伙我有考试测试我for循环的输出。但我似乎没有得到它如何输出变成11?for循环的输出如何工作?

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?它根本没有任何意义。

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

for循环开始i1,并保持增加2i,停车时i10更大。这是第一次发生在i == 11,所以循环退出并且i仍然为11

这不是真的清楚你在所有的期待,但看看会发生什么:

  • 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
+0

非常感谢。 – Minelava 2013-03-05 00:33:59

+0

你打败了我的描述为什么,很好的答案。 – Greg 2013-03-05 00:42:30

如果你把消息框循环:

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

那么你将得到5个消息框中以数值1,3,5,7和9

作为消息框是在循环之后,你GE t单个消息框中的变量在循环后具有的值,即11.

实质上,由于循环遍历结果的方式,循环无法终止。您的价值为i = 1

问题是你已经把i += 2

这将导致一个问题,究其原因是因为它会经过所有你的价值观,像这样:

  • i = 1:失败为您i <= 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); 

我不知道如果这是你的原始目标不同的数字,但希望有所帮助。我可能会添加错误的,但希望这可以让您指向正确的方向。