swift - 初学者问题 - 为什么我应该在这个例子中使用嵌套循环?
问题描述
我正在努力学习 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)
}
也可以按应有的方式工作,而且看起来更简单。我了解我的方法(第二个代码),但不是我应该使用的方法。我的问题:
- 为什么会有嵌套循环?
- 为什么在第一个示例中嵌套循环引用 columnPixel (for _ in 1...columnPixel),因为它已经定义它应该重复循环到 5?
- 最后,为什么“print(tempRow)”在嵌套循环之外?
这是挑战:https ://docs.google.com/document/d/1DI-4RkYkRl8EPY17TOwfK8gCl--KMdqLEPP-hz6QHI0/edit#(向下滚动到挑战 5)
先感谢您!
解决方案
为什么会有嵌套循环?
外环和内环有不同的用途。外循环的每次迭代都会打印一行。内部循环的每次迭代“构造”打印的字符串。
为什么在第一个示例中嵌套循环引用 columnPixel (for _ in 1...columnPixel),因为它已经定义它应该重复循环到 5?
columnPixel
在内循环中引用,因为内循环的迭代次数根据外循环的迭代而变化:
- 在外循环的第一次迭代中,内循环只循环一次。构造的字符串是
*
- 在外循环的第二次迭代中,内循环循环了两次。构造的字符串是
**
- 在外循环的第三次迭代中,内循环循环了三次。构造的字符串是
***
- 等等...
请注意,columnPixel
外循环的每次迭代都会发生变化。在第一次迭代中它是 1,在第二次迭代中它是 2,等等。这就是为什么我们columnPixel
在内部循环中说“循环很多次”。
最后,为什么“print(tempRow)”在嵌套循环之外?
我们只想打印构造的字符串,而不是在构造它的时候。
推荐阅读
- javascript - 具有多个系列的 Highchart.js 的正确 json 格式
- python - 如何遍历字典中的一堆列表?
- c - SetThreadContext 有效,但寄存器没有改变
- regular-language - L= {0^i1^j | 的最小泵送长度 i >= j} 证明 L 是非正则的
- python - 调用 tf.image.rgb_to_grayscale 后无法显示图像
- lua - 没有返回正确的值
- python - Bokeh - 具有分类值的多线图
- websphere-liberty - wasdev 和 openliberty maven 插件之间的区别
- generator - 我可以使用哪个站点生成器?
- python-3.x - GeoPy 不工作:没有得到 nom.geocode() 的结果的原因是什么?