2016-01-06 113 views
-4

我有一個關於C#中循環的問題。C#:For循環說明

我的代碼:

for(i = 1; i < 100; i*=2) 
{ 
    Console.Write(i + " "); 
} 
Console.Readkey(); 

我認爲結果應該是 「2 4 8 16 32 64」,但我得到 「1 2 4 8 16 32 64」。 「1」從哪裏來?

+0

[C#爲參考](https://msdn.microsoft.com/en-us/library/ch45axte.aspx) –

+0

循環是工作,但我不明白輸出。 – user3219200

+0

我的答案解釋了爲什麼你看到輸出 – Taegost

回答

4

我知道你已經得到了正確的答案,但我想解釋更深因爲我認爲你是一名初學者程序員。

來自$8.8.3 The for statement in C#spec;

  • 如果爲初始值設定存在,則變量初始值設定或語句表達式在它們被寫入的順序被執行:

    for-statement: 
        for ( for-initializer ; for-condition ; for-iterator ) embedded-statement 
    

    for語句的執行過程如下。此步驟僅執行一次。

  • 如果存在for-condition,則會進行評估。
  • 如果for-condition不存在或評估結果爲真,則控制權將轉移到嵌入式聲明中。 當且如果 控制達到嵌入語句的結束點(可能從 執行continue語句),則在迭代器(如果有的話)的表達式在序列中評估,然後執行另一個 迭代首先在上述步驟中評估條件爲 。
  • 如果存在for-condition並且評估結果爲false,則將控制權轉移到for語句的結束點。

正如你所看到的,對於- 迭代器(這是i*=2你的情況),將不執行直到您完成第一次迭代自從i < 100回報truei = 1

由於a picture is worth a thousand words,所以..

enter image description here

2

您正在啓動,其中i = 1因此你的第一數目是1。

for循環是由三個部分組成:啓動,條件和步驟。

我會嘗試解釋幾個步驟,以便您可以明白。

首先你進入1,你打印它。然後它到達i * = 2,這相當於i = i * 2。在這個條件被驗證之後,如果它是真的,那麼再次進入執行塊。希望這能爲你解決。你也只是乘以2,而不是以2的冪增加,這在另一個答案中有解釋。

+0

編輯:代碼錯了。我忘了「2」。 – user3219200

7

您正在將i初始化爲1,i = 1,這是1的來源。

在循環完成至少一次之前,增量(您的i * =;部分)纔會被調用,所以直到它顯示i的值後纔會獲得下一個值,即1

要看到你期待什麼,你需要將循環更改爲:

for(i = 2; i < 100; i*=2) 
{ 
    Console.Write(i + " "); 
} 
Console.Readkey(); 
+1

謝謝,現在我明白了。 – user3219200

+0

不客氣。如果有幫助,請接受它作爲答案 – Taegost

2

您應該使用

for(i = 2; i <= 100; i=i*2) 
{ 
    Console.Write(i + " "); 
} 
Console.Readkey();