首页 > 解决方案 > 初学者问题 - 为什么我应该在这个例子中使用嵌套循环?

问题描述

我正在努力学习 Swift。我现在正在与 Chris 一起学习 Code 的“初学者 Swift 教程”的第 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 _ in 1...height{
    tempRow += drawPixel
    print(tempRow)
}

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

  1. 为什么会有嵌套循环?
  2. 为什么在第一个示例中嵌套循环引用 columnPixel (for _ in 1...columnPixel),因为它已经定义它应该重复循环到 5?
  3. 最后,为什么“print(tempRow)”在嵌套循环之外?

这是挑战:https ://docs.google.com/document/d/1DI-4RkYkRl8EPY17TOwfK8gCl--KMdqLEPP-hz6QHI0/edit#(向下滚动到挑战 5)

先感谢您!

标签: swift

解决方案


为什么会有嵌套循环?

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

为什么在第一个示例中嵌套循环引用 columnPixel (for _ in 1...columnPixel),因为它已经定义它应该重复循环到 5?

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

  • 在外循环的第一次迭代中,内循环只循环一次。构造的字符串是*
  • 在外循环的第二次迭代中,内循环循环了两次。构造的字符串是**
  • 在外循环的第三次迭代中,内循环循环了三次。构造的字符串是***
  • 等等...

请注意,columnPixel外循环的每次迭代都会发生变化。在第一次迭代中它是 1,在第二次迭代中它是 2,等等。这就是为什么我们columnPixel在内部循环中说“循环很多次”。

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

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


推荐阅读