我对这个节目很困惑。
fun main(args: Array<String>) {
val condition1 = true
val condition2 = false
val condition3 = true
val state = (if (condition1) 1 else 0) shl 2 or
(if (condition2) 1 else 0) shl 1 or
(if (condition3) 1 else 0)
println(state)
when (state) {
0b100 -> println("Only condition1 is true.")
0b010 -> println("Only condition2 is true.")
0b001 -> println("Only condition3 is true.")
0b101 -> println("condition1 and condition3 are true.")
0b110 -> println("condition1 and condition2 are true.")
0b011 -> println("condition2 and condition3 are true.")
0b111 -> println("All conditions are true.")
else -> println("All conditions are false.")
}
}
字符串
我期望打印“condition1 and condition3 are true.”.但这段代码总是返回else块“All conditions are false.”
此外,我的IDE警告'永远无法访问'如下。
的数据
为什么会这样?有人能帮帮我吗?
1条答案
按热度按时间4urapxun1#
你忘记了一些括号,你的表达式的第一行的结果是用
(if (condition2) 1 else 0)
得到或艾德,然后整个结果左移了1,所以现在第一个1已经左移了3。在第二行添加括号以修复它:
字符串
实际上,只有一个分支是可到达的,因为你只使用局部常量输入和局部计算。编译器只警告你它足够复杂可以检测到的那些分支。