Tina Tang's Blog

在哪裡跌倒了,就在哪裡躺下來

0%

Android筆記(4)-在Kotlin中新增條件式行為

Lucky Dice Roll 是一款以 Kotlin 為基礎的骰子遊戲,您可以在其中指定一個幸運數字。只要玩家擲出這個幸運數字,即可獲勝。

學習目標

  • 如何使用ifelse陳述式。
  • 如何使用大於(>)小於(<)等於(==)等運算子來比較值。
  • 如何使用when陳述式來根據指定值選擇選項。
  • Boolean資料類型是什麼,以及如何使用truefalse值來做出決策。

建立 Lucky Dice Roll 遊戲

設定範例程式碼

參考之前的Dice Roller程式並修改。

1
2
3
4
5
6
7
8
9
10
11
12
fun main() {
val myFirstDice = Dice(6)
val rollResult = myFirstDice.roll()
println("Your ${myFirstDice.numSides} sided dice rolled ${rollResult}!")
}

class Dice (val numSides: Int) {

fun roll(): Int {
return (1..numSides).random()
}
}

檢查是否擲出幸運數字

  1. 刪除println,並新增名為luckyNumberval,將其設為4
1
2
3
4
5
fun main() {
val myFirstDice = Dice(6)
val rollResult = myFirstDice.roll()
val luckyNumber = 4
}
  1. 新增if陳述式,用於檢查rollResult是否等於(==)luckyNumber
1
2
3
4
5
6
7
8
fun main() {
val myFirstDice = Dice(6)
val rollResult = myFirstDice.roll()
val luckyNumber = 4
if (rollResult == luckyNumber) {

}
}
  1. 大括號{}內新增println陳述式,以列印"You win!"
1
2
3
4
5
6
7
8
fun main() {
val myFirstDice = Dice(6)
val rollResult = myFirstDice.roll()
val luckyNumber = 4
if (rollResult == luckyNumber) {
println("You win!")
}
}

在未擲出幸運數字時回應

  1. 新增else陳述式以列印"You didn't win, try again!"
1
2
3
4
5
6
7
8
9
10
fun main() {
val myFirstDice = Dice(6)
val rollResult = myFirstDice.roll()
val luckyNumber = 4
if (rollResult == luckyNumber) {
println("You win!")
} else {
println("You didn't win, try again!")
}
}
  1. 新增else if陳述式,即可針對每次擲骰輸出不同訊息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
fun main() {
val myFirstDice = Dice(6)
val rollResult = myFirstDice.roll()
val luckyNumber = 4

if (rollResult == luckyNumber) {
println("You win!")
} else if (rollResult == 1) {
println("So sorry! You rolled a 1. Try again!")
} else if (rollResult == 2) {
println("Sadly, you rolled a 2. Try again!")
} else if (rollResult == 3) {
println("Unfortunately, you rolled a 3. Try again!")
} else if (rollResult == 5) {
println("Don't cry! You rolled a 5. Try again!")
} else {
println("Apologies! You rolled a 6. Try again!")
}
}

使用 when 陳述式

  1. 在程式的 main() 中,選取從第一個if陳述式至括住最後一個else陳述式的大括號}之間的程式碼,然後刪除這些程式碼。
1
2
3
4
5
fun main() {
val myFirstDice = Dice(6)
val rollResult = myFirstDice.roll()
val luckyNumber = 4
}
  1. 建立when陳述式。由於when須針對擲出的結果進行測試,因此請將rollResult包含在括號()內。
1
2
3
4
5
6
7
8
9
fun main() {
val myFirstDice = Dice(6)
val rollResult = myFirstDice.roll()
val luckyNumber = 4

when (rollResult) {

}
}
  1. when陳述式的大括號{}內,新增用來測試luckyNumber的陳述式rollResult。如果兩者相同,系統會顯示獲勝訊息。此陳述式如下所示:
1
luckyNumber -> println("You win!")

在 main 函式中:

1
2
3
4
5
6
7
8
9
fun main() {
val myFirstDice = Dice(6)
val rollResult = myFirstDice.roll()
val luckyNumber = 4

when (rollResult) {
luckyNumber -> println("You win!")
}
}
  • 表示當 rollResult 等於 luckyNumber 時,就執行 println("You win!")
  1. 使用相同的模式為可能擲出的數字 1 至 6 (4 除外) 新增行和訊息,如下所示。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
fun main() {
val myFirstDice = Dice(6)
val rollResult = myFirstDice.roll()
val luckyNumber = 4

when (rollResult) {
luckyNumber -> println("You win!")
1 -> println("So sorry! You rolled a 1. Try again!")
2 -> println("Sadly, you rolled a 2. Try again!")
3 -> println("Unfortunately, you rolled a 3. Try again!")
5 -> println("Don't cry! You rolled a 5. Try again!")
6 -> println("Apologies! You rolled a 6. Try again!")
}
}

總結

if-else 的一般形式:

1
2
3
4
5
6
7
if (condition-is-true) {
execute-this-code
} else if (condition-is-true) {
execute-this-code
} else {
execute-this-code
}

when 陳述式:

1
2
3
4
5
when (variable) {
matches-value -> execute-this-code
matches-value -> execute-this-code
...
}

自行練習

  1. 將 myFirstDice 變更為包含 8 個面並執行程式碼。會發生什麼?
    當您增加面數時,when 陳述式不會再涵蓋所有情況,因此如果出現未涵蓋的情況,系統不會顯示任何內容。

  2. 修正 when 陳述式,以涵蓋所有 8 個面。
    使用 else 陳述式可捕捉所有未明確涵蓋的情況,而不必針對每個數字新增新的情況。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
fun main() {
val myFirstDice = Dice(8)
val rollResult = myFirstDice.roll()
val luckyNumber = 4

when (rollResult) {
luckyNumber -> println("You win!")
1 -> println("So sorry! You rolled a 1. Try again!")
2 -> println("Sadly, you rolled a 2. Try again!")
3 -> println("Unfortunately, you rolled a 3. Try again!")
5 -> println("Don't cry! You rolled a 5. Try again!")
6 -> println("Apologies! You rolled a 6. Try again!")
else -> println("Sorry! You rolled 7 or 8. Try again!")
}
}

class Dice (val numSides: Int) {

fun roll(): Int {
return (1..numSides).random()
}
}