kotlin - 带有 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?
谢谢!
解决方案
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 }
推荐阅读
- javascript - Discord.js 速率限制延迟
- java - Spring Boot Mongo Data - 如何设置命名策略
- regex - VBS 正则表达式将插入字符替换为许多相似的短语
- html - 如何使用 TWIG 删除部分 HTML 代码?
- groovy - JMeter Groovy - 响应代码为 500 的 WebDriver 采样器动态名称
- discord.js - 如何获得 3 次用户提及?- 不和谐-js
- interface - 在 F# 中,如何将接口添加到部分类(来自另一个项目)
- javascript - 如何在 Jest 中测试内部商店更新?
- html - 如何用xml和xsl显示img
- oracle-sqldeveloper - sql developer上的连接按钮不见了。怎么了?