#12 — nested loop(巢狀迴圈) 練習&Swift 的九九乘法 App

呈現畫面:

此篇內容只是因為我單純不太熟悉巢狀迴圈而做的練習,所以做的蠻簡陋的,老實說幾乎都是看著解答或參考別人文章才知道怎麼做,不多說直接附上解答XD

viewDidLoad()裡先加入以下(字如果超出範圍會自動縮小調整)

showLabel.adjustsFontSizeToFitWidth = true

直角三角形

func rightTriangle(){
showLabel.textAlignment = .natural
var text = ""
let num = Int(sliderOutlet.value)
for i in 1...num{
for _ in 1...i{
text += "🐽"
}
text += "\n"
}
showLabel.text = text
numberLabel.text = "\(num)"
}

正方形

func square(){
var text = ""
let num = Int(sliderOutlet.value)
for _ in 1...num{
for _ in 1...num{
text += "🐽"
}
text += "\n"
}
showLabel.text = text
numberLabel.text = "\(num)"
}

金字塔

func pyramind(){
showLabel.textAlignment = .center
var text = ""
let num = Int(sliderOutlet.value)
for i in 1...num{
for _ in 1...i{
text += "🐽"
}
text += "\n"
}
showLabel.text = text
numberLabel.text = "\(num)"
}

菱形

func diamond(){
showLabel.textAlignment = .center
var text = ""
let num = Int(sliderOutlet.value)
var pigCount = 1
for i in 1...(num*2-1){
for _ in 1...pigCount{
text += "🐽"
}
if i < num {
pigCount += 2
}else{
pigCount -= 2
}
text += "\n"
}
showLabel.text = text
numberLabel.text = "\(num)"
}

九九乘法(包含0)

func ninetyNine(){
var text = ""
let num = Int(sliderOutlet.value)
for i in 0...9{
for x in 0...num{
if i == 0 {
text += "\(x)\t"
}else if x == 0{
text += "\(i)\t"
}else{
text += "\(x*i)\t"
}
}
text += "\n"
}
showLabel.text = text
numberLabel.text = "\(num)"
}

參考資料:

九九乘法app是利用亂數出題,比較特別的是亂數有可能得到相同得數字,所以這邊我利用了repeat-while防止選擇的數字重複,再用空陣列加上shuffle()去裝選項就可以完成了。

func randomQuestion(){
let randomNum1 = Int.random(in: 2...9)
let randomNum2 = Int.random(in: 2...9)
questionLabel1.text = "\(randomNum1)"
questionLabel2.text = "\(randomNum2)"

var answerNum1 = Int.random(in: 4...81)
var answerNum2 = Int.random(in: 4...81)
//設定不會有同樣答案選項
repeat {
answerNum1 = Int.random(in: 4...81)
answerNum2 = Int.random(in: 4...81)
} while rightAnswer == answerNum1 || rightAnswer == answerNum2
rightAnswer = randomNum1*randomNum2

var answerArray = [answerNum1,answerNum2,rightAnswer]
//陣列隨機洗牌
answerArray.shuffle()
print(answerArray)
for num in 0...answerArray.count-1{
answerOutlets[num].setTitle("\(answerArray[num])", for: .normal)
}
}

參考資料:

GitHub網址:

--

--