【问题标题】:Explain this nested for loop?解释这个嵌套的 for 循环?
【发布时间】:2015-05-23 02:25:42
【问题描述】:
这是创建一个已设置宽度和高度的正方形,并使用破折号将其打印到输出中,并且运行完美;但我似乎并不完全理解第二个和第三个循环在做什么以及它是如何运行的。
- (void)draw {
for (int w = 1; w <= width; w++) {
printf("-");
}
***
for (int h = 0; h <= height; h++) {
printf("\n");
printf("|");
for (int space = 0; space <= width; space++) {
printf(" ");
}
printf("|");
}
***
for (int w = 1; w <= width; w++) {
if (w == 1) {
printf("\n");
}
printf("-");
if (w == width)
printf("\n");
}
}
}
【问题讨论】:
标签:
objective-c
for-loop
nested-loops
【解决方案1】:
"\n" 表示换行,因此 second 循环开始一个新行,然后打印一个管道(竖线)。
for (int h = 0; h <= height; h++) {
printf("\n");
printf("|");
第三个循环打印一堆空格。
for (int space = 0; space <= width; space++) {
printf(" ");
第二个循环然后为盒子的右边缘打印另一个管道。
printf("|");
第二个循环然后“循环”并重复执行很多次。
最后一个循环打印一个新行,然后在底部边缘打印一堆破折号“-”。
【解决方案2】:
您要询问的中间循环基本上绘制了框的左侧和右侧,一个'|'一次,从上到下...打印第一个 |在左侧,然后是一堆空格,然后是第一个 |在右侧。然后它向下移动到下一行并重新重复。
形象化可能更容易:
在第一个循环之后,你会得到这样的东西(假设宽度 = 15)
---------------
一旦第二个开始,它会插入一个换行符并在左侧打印一个管道|,留下:
---------------
|
然后,内部循环插入与您的宽度相同的空格(此处表示为o),留下以下内容:
---------------
|ooooooooooooooo
插入空格后,在右侧绘制另一个管道,剩下的是:
---------------
| |
这会持续height 次,直到剩下(假设高度 = 5):
---------------
| |
| |
| |
| |
| |
最后,最后一个循环打印底部,就像顶部一样:
---------------
| |
| |
| |
| |
| |
---------------
【解决方案3】:
第一个循环打印出顶部水平虚线。
下一个循环打印每行的两条垂直虚线,首先打印左虚线,然后循环宽度和打印空格,然后打印右虚线。这发生在正方形高度的每一行。
最后一个循环打印出底线的破折号。