Swift 初学者问题-在本例中为什么要使用嵌套循环?

Swift 初学者问题-在本例中为什么要使用嵌套循环?,swift,Swift,我在学斯威夫特。我现在和Chris一起学习第5课“初学者快速教程”。我正在完成他准备的所有挑战,但我被困在挑战5中,那就是打印这样的图案: * ** *** **** ***** var drawPixel:String = "*" var height:Int = 5 var tempRow:String = "" for columnPixel in 1...height { tempRow = "" for _

我在学斯威夫特。我现在和Chris一起学习第5课“初学者快速教程”。我正在完成他准备的所有挑战,但我被困在挑战5中,那就是打印这样的图案:

*
**
***
****
*****
var drawPixel:String = "*"
var height:Int = 5
var tempRow:String = ""

for columnPixel in 1...height {
    tempRow = ""
    for _ in 1...columnPixel{
        tempRow += drawPixel
    }
    print(tempRow)
}
我不明白为什么我应该使用嵌套循环

根据已完成的质询文件,代码应如下所示:

*
**
***
****
*****
var drawPixel:String = "*"
var height:Int = 5
var tempRow:String = ""

for columnPixel in 1...height {
    tempRow = ""
    for _ in 1...columnPixel{
        tempRow += drawPixel
    }
    print(tempRow)
}
但是

它的工作方式也应该如此,而且看起来更简单。我理解我的方法(第二个代码),但不是我应该使用的方法我的问题:

  • 为什么会有嵌套循环
  • 为什么在第一个示例中嵌套循环引用columnPixel(对于uin 1…columnPixel),因为它已经被定义为应该将循环重复到5
  • 最后,为什么“print(tempRow)”在嵌套循环之外
  • 这是挑战:(低到挑战5)

    提前谢谢你

    为什么会有嵌套循环

    外环和内环的用途不同。外部循环的每次迭代打印一行。内部循环的每次迭代“构造”打印的字符串

    为什么在第一个示例中嵌套循环引用columnPixel(对于uin 1…columnPixel),因为它已经被定义为应该将循环重复到5

    columnPixel
    在内环中引用,因为内环的迭代次数根据外环的哪个迭代而变化:

    • 在外循环的第一次迭代中,内循环只循环一次。构造的字符串是
      *
    • 在外循环的第二次迭代中,内循环循环两次。构造的字符串是
      **
    • 在外循环的第三次迭代中,内循环循环三次。构造的字符串是
      ***
    • 等等
    请注意,
    columnPixel
    随着外部循环的每次迭代而变化。在第一次迭代中它是1,在第二次迭代中它是2,以此类推。这就是为什么我们在内部循环中说“loop
    columnPixel
    lots times”

    最后,为什么“print(tempRow)”在嵌套循环之外


    我们只想打印构造的字符串,而不是在构造字符串时打印。

    为了让您的问题更清楚,您应该包括所需的代码输出(即,您在挑战5中应该执行的操作)。第一个示例从头创建一个新字符串,以便为外部循环的每次迭代打印,第二个重新使用字符串并修改它。当然,第二个较短,但由于我不知道练习的目的是什么,我不知道这是否意味着更好。我只是编辑了这篇文章,并添加了挑战5的链接-请看一看。:)问题应该是独立的,所以我在中添加了挑战的要求。希望你不介意。没问题,谢谢!非常感谢。我想我现在明白了,但我需要确定一个要素:1。tempRow=”“位于外部循环中,以让编译器知道它应该重复嵌套循环多少次?如果我从外部循环中删除tempRow=“”,控制台每次会多打印四个*(我想是基于嵌套循环的数量?)。我又添加了三个嵌套循环,只是为了检查我的想法是否正确。
    tempRow
    是存储部分构造行的变量。每次开始构造新行(即,就在内部循环之前)时,都需要去掉由循环的上一次迭代构造的行。这就是
    tempRow=”“
    所做的@kacper3355@kacper3355内部循环需要运行的次数由
    columnPixel
    确定。如果为1,则内部循环运行一次。如果为2,则内部循环运行两次。