2015-11-28 62 views
0

我没有本书以外的编码经验嵌套循环 - Swift 2

编程Swift!斯威夫特2的Kindle版 由尼克·史密斯(作者)

我目前是第

5.3嵌套的for循环

//嵌套的FOR LOOP#2

此代码 -

for var a = 0; a < 11; a++ { 
    print("") 

    for var b = 0; b < a; b++ { 
     print("*", terminator: " ") 

    } 

} 

GENERATES THIS PATTERN...

现在[几个/ 4小时的'奇'后]我简直不能工作HOW TO CHANGE THE ABOVE 'simple' [if you know how] CODE TO GENERATE THIS PATTERN??

我(想我)可以看到外部和内部循环我只是不能解决其余的!我试过了我能想到的每一个变化! (并意识到只是做'排列'并不意味着我对我正在尝试做的事情有真正的理解......)

尝试使用--operators并更改[most/all]值[但'排列是一种有限的方法]

我觉得自己像一个傻瓜总数字,但如果它是我第一次见过这东西,也许它不是那么糟糕,这些事情需要学习!??

帮助(答案LOL)将不胜感激

+0

'for var b = 0; b <10-a; b ++ {'? – trojanfoe

+0

埃里克感谢您的解决方案和建议,当您知道如何使用时,它非常简单 – BenGee333

+0

@ BenGee333我的意思是我相信用低质量的例子学习Swift并不是件好事。也许我在评论中有点直接,对不起。 :)但我对苹果电子书的建议仍然存在。 – Moritz

回答

1

如何做到这一点系统地:如果你想得到例如user3441734的输出:有11行。我们从0到10的线,所以我们有一个循环,将行到值0〜10

for var line = 0; line < 11; ++line 

接下来,我们要在每行打印什么?在第0行中,我们要打印11 *个字符。在第10行中,我们要打印1个星号字符。星星的数量是11线。我如何获得表达11行?星星的数量随着线路的增加而下降,所以它必须是线路。当行= 0,必须有11颗星,所以东西 - 0 = 11,有事= 11。因此,在循环中的第一行:

let starcount = 11 - line 

然后我们想打印(星数)乘以一个明星,一个空格字符,然后开始一个新行。

for var star = 0; star < starcount; ++star { 
    print ("*", terminator: " ") 
} 
print ("") 

一起:

for var line = 0; line < 11; ++line { 
    let starcount = 11 - line 
    for var star = 0; start < star count; ++star { 
     print ("*", terminator: " ") 
    } 
    print ("") 
} 

我们简化环路一点:

for var line in 0 ..< 11 { 
    let starcount = 11 - line 
    for var star in 0 ..< starcount { 
     print ("*", terminator: " ") 
    } 
    print ("") 
} 

如果你想要一个不同的模式,所有你需要做的是,如果更改号码11行数不同,并改变starcount的计算。实际上最好还有一个linecount变量,所以更改为不同的模式更容易:

let linecount = 11 
for var line in 0 ..< line count { 
    let starcount = linecount - line 
    for var star in 0 ..< starcount { 
     print ("*", terminator: " ") 
    } 
    print ("") 
} 
3
for var a = 10; a > 0; a-- { 

    for var b = 0; b < a; b++ { 
     print("*", terminator: " ") 

    } 
    print() 
} 

打印

* * * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * 
* * * * * * * * 
* * * * * * * 
* * * * * * 
* * * * * 
* * * * 
* * * 
* * 
* 

对于时下斯威夫特语法UPDATE,具有相同的功能

for a in stride(from: 10, through: 0, by: -1) { 
    for _ in stride(from: 0, to: a, by: 1) { 
     print("*", terminator: " ") 
    } 
    print() 
}