嵌套 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("*");
}
- 先执行
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步外层循环。
它一直这样做,直到外循环中的条件计算结果为假。
如果您不理解 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:
现在清楚了吗?
我不确定这段代码是如何编译的(使用 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("*");
}
- 先执行
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步外层循环。
它一直这样做,直到外循环中的条件计算结果为假。
如果您不理解 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:
现在清楚了吗?