我不确定这段代码是如何编译的(使用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”); 或......
答案 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("*");
}
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。
答案 3 :(得分:0)
i: 0
,j: 1 to 7
打印*
,然后打印\n
i: 1
,j: 1 to 6
打印*
,然后打印\n
等等和