为什么我的 Kotlin 程序无法编译?

问题描述 投票:0回答:1

我目前正在学习 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
1个回答
0
投票

为什么我的 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!") 
}
© www.soinside.com 2019 - 2024. All rights reserved.