[英]How do nested for loops work in c#
我不確定如何編譯此代碼(僅使用Visual Studio代碼即可)
int i,j;
for(i=0; i<=6; i++) {
for (j=1; j<=7-i; j++) {
Console.Write("*");
}
Console.Write("\n");
}
is written. But then from here I do not understand what happens or why it happens. Does the compiler then run or... 我的問題是,當代碼開始被編譯時,首先測試for循環 ,它將是true,然后測試嵌套的for循環 ,它將是true,因此編寫了 。但是從這里我不知道會發生什么或為什么發生。編譯器然后運行或...
如果您不了解for循環,則可以隨時將其簡化為更簡單的語句:
for ( init ; condition; increment )
body;
只是一種較短的寫作方式
init;
while (condition)
{
body;
increment;
}
所以你的循環
for(i=0; i<=6; i++) {
for (j=1; j<=7-i; j++) {
Console.Write("*");
}
Console.Write("\n");
}
只是一種簡短的寫作方式
i = 0;
while (i <= 6)
{
j = 1;
while (j <= 7 - i)
{
Console.Write("*");
j++;
}
Console.Write("\n");
i++;
}
這更清楚嗎?
如果仍然不清楚,您可以進一步降低它。
while(condition)
body
只是寫的短途
START:
if (!condition)
goto END;
body;
goto START;
END:
所以你的循環就是:
i = 0;
START_1:
if (!(i <= 6))
goto END_1;
j = 1;
START_2:
if (!(j <= 7 - i))
goto END_2;
Console.Write("*");
j++;
goto START_2;
END_2:
Console.Write("\n");
i++;
goto START_1;
END_1:
現在清楚了嗎?
變量會像這樣變化。
i = 0 : j changes from 0 to 7 ( 7- i, but i = 0)
i = 1 : j changes from 0 to 6 (7 - i, i = 1)
.
.
.
.
i = 6: j changes from 1 to 1 (7 - i, i = 6)
在每個i循環中,您正在打印j循環和換行符。
|j-loop|i-loop|
|******|'\n' |
因此,您將獲得輸出,
*******
******
*****
****
***
**
*
我不會僅向您顯示輸出,因為您的問題不是輸出是什么,而是for
循環的工作方式。
讓我們一步一步地做。 這是一些偽代碼:
for ( init; condition; increment )
{
Console.Write("*");
}
init
並且在遇到循環時僅執行一次。 對於for
循環,這只對一次。 condition
被評估。 如果為真,則執行主體。 因此, Console.Write("*");
被執行。 increment
。 condition
。 如果為真,則執行主體。 因此, Console.Write("*");
被執行。 完成步驟3和4,直到condition
為假。 一旦為假,則循環退出,並執行以下代碼行。
在您的問題中,您有一個循環,如果條件為真,它將開始另一個循環。 該循環從1開始,如果i
為0,則從7中減去它,7-0為7,由於j
為0且小於7,它將執行主體並打印*。 它繼續執行步驟3和4,並打印*七次。 然后條件為假,因此它跳到內循環之外並打印新行。
然后對外部循環執行步驟3和4。
它一直這樣做,直到外部循環中的條件評估為false為止。
i: 0
, j: 1 to 7
打印*
,然后打印\\n
i: 1
, j: 1 to 6
打印*
,然后打印\\n
,依此類推
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.