我正在从this YouTube video学习Kotlin,在35:45他正在运行以下代码:
我试过运行完全相同的代码:
fun main() {
val x = readLine()?:"1"
val y = readLine()?:"1"
val z = x.toInt() + y.toInt()
print(z)
}
但我得到这个错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.base/java.lang.Integer.parseInt(Integer.java:662)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
at MainKt.main(Main.kt:4)
at MainKt.main(Main.kt)
有人能帮帮我吗?我真的是Kotlin的菜鸟(也是软件编程的菜鸟),我还没有在网上找到答案。
谢谢大家。
1条答案
按热度按时间mnemlml81#
Elvis运算符仅在左操作数为
null
时计算右操作数。空字符串""
与null
不同。readLine()
在检测到“文件结束”时返回null。当从文件阅读时,这显然是在到达结束时。当从stdin(控制台的标准输入)读取时,这通常是在按Ctrl+D时。如果您只按Enter键,您实际上输入的是一个 * 空 * 行(
""
),而不是“文件结束”。如果你想在命令行上按Enter键时得到这种默认值,那么你应该对空字符串而不是null做出React。正如@lukas.j提到的,一种方法是使用ifEmpty来提供默认值: