Kotlin中出现数字格式异常

70gysomp  于 2023-02-16  发布在  Kotlin
关注(0)|答案(1)|浏览(133)

我在CodeChef上解决一个问题。一个特定的行来接受输入,比如:

10 232 4543

我愿意将它存储在变量中,然后进行计算。
下面是我用来实现这一点的代码行。

val (d,l,r) = readLine()!!.split(" ").map{ it -> it.toInt()}

此行适用于上一个问题,但不适用于当前问题。我正在插入我的代码和问题的链接。

fun main(){
    var t = readLine()!!.toInt()
    for(i in 0 until t){
    val (d,l,r) = readLine()!!.split(" ").map{ it -> it.toInt()}
    if(d<l){
        println("Too Early")
    }
    else if(d>r){
        println("Too Late")
    }
    else{
        println("Take second dose now")
    }
    }
}

这是问题的链接:https://www.codechef.com/LP1TO201/problems/VDATES
以下是我收到的错误。

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
    at java.base/java.lang.Integer.parseInt(Integer.java:678)
    at java.base/java.lang.Integer.parseInt(Integer.java:786)
    at ProgKt.main(prog.kt:4)
    at ProgKt.main(prog.kt)
nnsrf1az

nnsrf1az1#

空字符串不是数字。有两种简单的方法可以解决这个问题:
使用isEmpty()过滤空字符串:

val (d,l,r) = readLine()!!.split(" ").filterNot { it.isEmpty() }.map { it -> it.toInt() }

使用toIntOrNull()并且只接受非空元素:

val (d,l,r) = readLine()!!.split(" ").mapNotNull { it -> it.toIntOrNull() }

相关问题