簡體   English   中英

嵌套for循環如何在C#中工作

[英]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("*");
}
  1. 首先執行init並且在遇到循環時僅執行一次。 對於for循環,這只對一次。
  2. condition被評估。 如果為真,則執行主體。 因此, Console.Write("*"); 被執行。
  3. 執行increment
  4. 再次評估condition 如果為真,則執行主體。 因此, Console.Write("*"); 被執行。

完成步驟3和4,直到condition為假。 一旦為假,則循環退出,並執行以下代碼行。

在您的問題中,您有一個循環,如果條件為真,它將開始另一個循環。 該循環從1開始,如果i為0,則從7中減去它,7-0為7,由於j為0且小於7,它將執行主體並打印*。 它繼續執行步驟3和4,並打印*七次。 然后條件為假,因此它跳到內循環之外並打印新行。

然后對外部循環執行步驟3和4。

它一直這樣做,直到外部循環中的條件評估為false為止。

i: 0j: 1 to 7打印* ,然后打印\\n

i: 1j: 1 to 6打印* ,然后打印\\n ,依此類推

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM