带有readLine()的用户输入100不被视为Int?科特林

  • 本文关键字:Int readLine 用户 带有 kotlin
  • 更新时间 :
  • 英文 :


我做了一个简单的代码,它包含两个范围,一个来自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作为值,因此如果不显式将其转换为IntegertoInt(),则范围检查将失败,因为它比较字符串数值。

例如表达式

"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 }

最新更新