我有一個關於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」從哪裏來?
我有一個關於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」從哪裏來?
我知道你已經得到了正確的答案,但我想解釋更深因爲我認爲你是一名初學者程序員。
來自$8.8.3
The for statement in C#spec;
for-statement:
for ( for-initializer ; for-condition ; for-iterator ) embedded-statement
for語句的執行過程如下。此步驟僅執行一次。
正如你所看到的,對於- 迭代器(這是i*=2
你的情況),將不執行直到您完成第一次迭代自從i < 100
回報true
爲i = 1
。
您正在啓動,其中i = 1因此你的第一數目是1。
for循環是由三個部分組成:啓動,條件和步驟。
我會嘗試解釋幾個步驟,以便您可以明白。
首先你進入1,你打印它。然後它到達i * = 2,這相當於i = i * 2。在這個條件被驗證之後,如果它是真的,那麼再次進入執行塊。希望這能爲你解決。你也只是乘以2,而不是以2的冪增加,這在另一個答案中有解釋。
編輯:代碼錯了。我忘了「2」。 – user3219200
您正在將i初始化爲1,i = 1,這是1的來源。
在循環完成至少一次之前,增量(您的i * =;部分)纔會被調用,所以直到它顯示i的值後纔會獲得下一個值,即1
要看到你期待什麼,你需要將循環更改爲:
for(i = 2; i < 100; i*=2)
{
Console.Write(i + " ");
}
Console.Readkey();
謝謝,現在我明白了。 – user3219200
不客氣。如果有幫助,請接受它作爲答案 – Taegost
您應該使用
for(i = 2; i <= 100; i=i*2)
{
Console.Write(i + " ");
}
Console.Readkey();
[C#爲參考](https://msdn.microsoft.com/en-us/library/ch45axte.aspx) –
循環是工作,但我不明白輸出。 – user3219200
我的答案解釋了爲什麼你看到輸出 – Taegost