嵌套for循环如何在c#中工作

时间:2016-12-29 03:20:42

标签: c# for-loop nested-loops

我不确定这段代码是如何编译的(使用Visual Studio代码只是fyi)

int i,j;

for(i=0; i<=6; i++) {

    for (j=1; j<=7-i; j++) {

        Console.Write("*");

    }
    Console.Write("\n"); 
 }

我的问题是当代码开始编译时,第一个 for loop 被测试并且它将是真的,然后测试嵌套的 for loop 并且这将是真的所以“Console.Write(”*“); 被写入。但是从这里我不明白发生了什么或为什么会发生。编译器然后运行控制台。写(“\ n”); 或......

4 个答案:

答案 0 :(得分:3)

如果您不了解for循环,您可以随时将其简化为更简单的陈述:

from django.db.models import ProtectedError

def delete(request, id):

    try :
        note = get_object_or_404(puerto, pk=id).delete()
        messages.error(request, 'This puerto has been deleted.')

    except ProtectedError:
        messages.warning(request, "You can't delete this because it's being used by grupos")

    return redirect('/puertot')

只是一种较短的写作方式

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:

现在清楚了吗?

答案 1 :(得分: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-loop和一个换行符。

|j-loop|i-loop|
|******|'\n'  |

所以,你会得到输出,

******* 
****** 
*****
****
***
**
*

答案 2 :(得分:1)

我不会简单地向您显示输出,因为您的问题不是输出的内容,而是for循环的工作原理。

让我们一步一步来做。这是一些伪代码:

for ( init; condition; increment )
{
      Console.Write("*");
}
  1. 首先执行init,只在遇到循环时才执行一次。对于for循环,这只是一次。
  2. 评估condition。如果确实是身体被执行了。所以Console.Write("*");被执行了。
  3. 执行increment
  4. 再次评估condition。如果确实是身体被执行了。所以Console.Write("*");被执行了。
  5. 完成步骤3和4,直到condition为假。一旦它为假,循环退出并执行以下代码行。

    在你的问题中你有一个循环,如果条件为真,它会启动另一个循环。此循环从1开始,如果i为0,则从7减去7 - 0为7,并且由于j为0且小于7,它执行正文并打印*。它继续执行步骤3和4并打印*七次。然后条件为假,因此它跳出内部循环并打印一个新行。

    然后对外循环执行步骤3和4。

    它一直这样做,直到外部循环中的条件计算为false。

答案 3 :(得分:0)

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

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