我做了一个简单的代码,它包含两个范围,一个来自a..b,一个从c.d.。然后它检查e是否在至少一个范围内。
fun main(){
val a = readLine()!!
val b = readLine()!!
val c = readLine()!!
val d = readLine()!!
val e = readLine()!!
val f = (e in a..b || e in c..d)
println(f)
}
代码工作正常,直到一个范围有一个数字100,然后它开始给我false。我看到,如果我在所有读取行中插入toInt((,它就会重新开始工作。
有人能解释一下原因吗?在readLine((中!!,kotlin不认为100以上的数字是Int?
谢谢!
Kotlin
中的readLine
函数返回一个可选的String
作为值,因此如果不显式将其转换为Integer
和toInt()
,则范围检查将失败,因为它比较字符串数值。
例如表达式
"101" in "90".."102"
将返回false。
代替代码
"101".toInt() in "90".toInt().."102".toInt()
将返回true。
因此,如果您正在比较Integer
值,则应始终使用readLine()!!.toInt()
转换读取值
此外,如果你想避免意外崩溃,你应该检查空值和潜在的解析错误:
val a = try { (readLine() ?: "").toInt() } catch (e: NumberFormatException) { 0 }