我目前正在学习 Kotlin 并使用 https://play.kotlinlang.org/ 来编译我的代码。我尝试创建一个非常简单的程序,收集用户输入并给出输出。 然而,它没有运行。 是我的代码有错误还是在线IDE不允许用户输入?
fun main() {
println("Give me a number of minutes!")
var input:String = readLine()!!
var inputInMinutes = input.toInt()
var resultInSeconds:Int = 0
resultInSeconds = (inputInMinutes*60)
println("That is " + resultInSeconds + " seconds!")
}
我期望程序能够编译并运行,但它显示以下错误消息:
Give me a number of minutes!
Exception in thread "main" java.lang.NullPointerException
at FileKt.main (File.kt:7)
at FileKt.main (File.kt:-1)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (:-2)
是的,这不是漂亮或高效的代码:-)
为什么我的 Kotlin 程序无法编译?
实际上它确实编译没有错误。
像您观察到的异常是在运行时抛出的,而不是编译时抛出的。
关于您的具体例外情况:
根据网站论坛中的this post,Kotlin Playground 不支持交互式输入(就像您尝试使用
readLine()
一样)。
因此 input
仍然是空的 String
并且 input.toInt()
会抛出您看到的异常。
一个可能的解决方案(如上面提到的帖子中所建议的)是编写自己的函数来模拟
readLine()
:
val input = mutableListOf("123") // here you should put your input
fun myReadLine(): String? {
val line = input.firstOrNull()
input.removeAt(0)
return line
}
fun main() {
println("Give me a number of minutes!")
var input:String = myReadLine()!!
var inputInMinutes = input.toInt()
var resultInSeconds:Int = 0
resultInSeconds = (inputInMinutes*60)
println("That is " + resultInSeconds + " seconds!")
}