嵌套 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"); 
 }

我的问题是当代码开始编译时,第一个 for 循环 被测试并且它是 true,然后是嵌套的 for 循环 然后进行测试,它将是真实的,因此 "Console.Write(" * "); 被写入。但是从这里我不明白会发生什么或为什么会发生。编译器然后 运行 Console.Write(" \n "); 还是...

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

i: 1, j: 1 to 6 打印 *, 然后打印 \n 等等

变量是这样变化的。

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-loop 中,您将打印 j-loop 和一个换行符。

|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步外层循环。

它一直这样做,直到外循环中的条件计算结果为假。

如果您不理解 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:

现在清楚了吗?