首页 > 解决方案 > 带有 readLine() 的用户输入 100 不被视为 Int 吗?科特林

问题描述

我做了一个简单的代码,它有两个范围,1 来自 a..b 和 1 来自 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,然后它开始给我错误。我看到如果我在所有 readlines 中插入 toInt() ,它就会再次开始工作。

有人可以解释我为什么吗?在 readLine()!! 中,kotlin 无法将 100 以上的数字识别为 Int?

谢谢!

标签: kotlin

解决方案


in 中的readLine函数Kotlin返回一个可选String值,因此如果您没有将其显式转换为Integer具有toInt()范围检查的 an,则会失败,因为它会比较字符串数值。

例如表达式

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

推荐阅读