當我在手機上運行它時,我點擊的按鈕僅執行 3 種可能的操作中的 2 種,并且它會根據我在代碼中交換順序的方式而改變。例如,通常第一個選項根本不做任何事情,但有時第一個和最后一個作業,這取決于我如何重新排列代碼。我不知道是怎么回事。這是我用來執行此操作的代碼。
private fun changeScore() {
when ((1..10).random()) {
1 or 2 or 3 or 4 or 5-> win()
6 -> Toast.makeText(this, "neither", Toast.LENGTH_SHORT).show()
7 or 8 or 9 or 10 -> loss()
}
balance.text = getString(R.string.score, coins.toString())
}
private fun loss() {
coins --
Toast.makeText(this, "loss", Toast.LENGTH_SHORT).show()
}
private fun win() {
coins
Toast.makeText(this, "win", Toast.LENGTH_SHORT).show()
}
當我點擊按鈕時,您應該有機會失去 1 個硬幣或獲得 1 個硬幣,并且有十分之一的機會什么都沒有發生。此外,作為除錯助手,所有 3 個選項都值得稱贊。相反,三個選項之一根本不做任何事情,沒有硬幣,也沒有烤面包。我試圖忽略這個錯誤并重新排列它,所以那個不起作用的是那個只會祝酒的那個,但我不能讓它作業。我該如何解決這個問題,以便所有 3 種都有可能?請記住,我對 Kotlin 的經驗只有不到一周的時間,所以請記住這一點來解釋事情,因為我一般對編碼比較陌生。
uj5u.com熱心網友回復:
如果你想讓一個when塊處理多個條件,你需要使用逗號來分隔引數,而不是or
val i = 4
when(i) {
4, 5 -> println("a") // will print "a"
else -> println("b")
}
代替
val i = 4
when(i) {
4 or 5 -> println("a")
else -> println("b") // will print "b"
}
如果您想更好地了解什么時候在做什么,您可以在這種or情況下擴展它在做什么
val i = 4
val j = 4 or 5
println("j = $j") // will print "j = 5"
when(i) {
j -> println("a")
else -> println("b") // will print "b"
}
這些4 or 5陳述句被評估為一個數字,而不是一系列條件。
uj5u.com熱心網友回復:
您不應該or在 when 情況下使用 - 它是按位 OR 的運算子。
這意味著你1 or 2 or 3 or 4 or 5的等于7,第三種情況是15。這導致您選擇的案例“例外”。
https://kotlinlang.org/docs/control-flow.html#when-expression解釋了如何正確地進行您想要的切換:
when(i){
in 1..5 -> win() // use a range
6 -> tie()
7,8,9,10 -> loss() // or separate values with commas
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/411472.html
標籤:
