Kotlin Elvis运算符语法正确运行抛出NumberFormatException异常
问题根因
你代码中使用的?:是Kotlin的Elvis操作符,仅当左侧表达式返回null时,才会取用右侧的默认值。readLine()的返回规则是:
- 当到达输入流末尾(比如IDE运行时没配置输入、终端直接按Ctrl+D结束输入)时返回
null - 当你直接按回车不输入任何内容时,返回的是空字符串
"",不是null
你运行时拿到的输入是空字符串,Elvis操作符不会触发默认值"1",空字符串无法调用toInt()转成整数,就抛出了NumberFormatException。教程里讲师运行时要么输入了合法数字,要么所用运行环境无输入时readLine()返回null,和你本地的运行环境行为不一致。
修复方法
把空字符串、全空格的无效输入也纳入默认值触发条件即可,修改后的代码:
fun main() { // 输入为null、空串、全空格时都用默认值1 val x = readLine().takeIf { !it.isNullOrBlank() } ?: "1" val y = readLine().takeIf { !it.isNullOrBlank() } ?: "1" val z = x.toInt() + y.toInt() print(z) }
如果你用IDE或者在线Kotlin运行环境跑代码,记得提前在输入区域填入合法的数字再运行,也能避免这个报错。
内容的提问来源于stack exchange,提问作者constellation_du_fion
相关产品推荐
相关产品推荐

