Kotlin开发中SensorEvent值匹配区间时if语句被跳过直接走else
问题根因
- Kotlin 使用
..运算符生成的是升序闭区间,要求左端点值 ≤ 右端点值才会生成有效区间。你当前写的0.900000..-0.900000左端点大于右端点,属于空区间,没有任何数值能满足in条件,所以if分支永远不会触发。
修复方案
根据你的实际业务需求选择对应写法:
- 如果你要判断zAxis落在
-0.9到0.9的范围内,直接把区间顺序调换即可:
override fun onSensorChanged(event: SensorEvent) { runOnUiThread { val xAxis = event.values[0] val yAxis = event.values[1] val zAxis = event.values[2] Log.d("Eixos", /*"Eixo X: $xAxis, Eixo Y: $yAxis,*/ "Eixo Z: $zAxis") if (zAxis in -0.900000..0.900000){ imagemCelular!!.setImageResource(R.drawable.phoneright) Log.d("Phonin", "Certo") }else{ imagemCelular!!.setImageResource(R.drawable.phonewrong) Log.d("Phonin", "Errado") } } }
- 如果你要判断zAxis的绝对值大于等于0.9(即 ≤-0.9 或 ≥0.9),可以用以下两种写法替换判断条件:
// 写法1:直接写判断逻辑 if (zAxis <= -0.9 || zAxis >= 0.9) // 写法2:调用绝对值方法更简洁 if (zAxis.absoluteValue >= 0.9)
内容的提问来源于stack exchange,提问作者phacer
相关产品推荐
相关产品推荐

