2013-03-05 111 views
2

嘿傢伙我有考試測試我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?它根本沒有任何意義。

回答

3

循環的最後一次迭代是i = 9。循環終止於i += 2,它會給你i = 11

0

for循環開始i1,並保持增加2i,停車時i10更大。這是第一次發生在i == 11,所以循環退出並且i仍然爲11

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

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

+0

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

0

如果你把消息框循環:

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

那麼你將得到5個消息框中以數值1,3,5,7和9

作爲消息框是在循環之後,你GE t單個消息框中的變量在循環後具有的值,即11.

1

實質上,由於循環遍歷結果的方式,循環無法終止。您的價值爲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); 

我不知道如果這是你的原始目標不同的數字,但希望有所幫助。我可能會添加錯誤的,但希望這可以讓您指向正確的方向。