2015-11-28 66 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() 
}