Код:

fun main(args: Array<String>) {
    println("I'm running")
    val str = readLine()
    var sum = 0
    val arr: IntArray
    if (str != null) {
        arr = str.split(" ").map(String::toInt).toIntArray()
        for (ch in arr)
            sum += ch
        println(sum)
    }
    println("not running anymore")
}

ВХОД:

56 -44 -72 -79 -38 -80 4 -85 34 -56 -92 51 36 -12 59 -43 31 17 -76 -8 -52 28 45 -68 -96 -7 -70 20 

И вот что у меня получилось:

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:592)
    at java.lang.Integer.parseInt(Integer.java:615)
    at KotKt.main(kot.kt:8)
0
user9686432 23 Апр 2018 в 17:53

1 ответ

Лучший ответ

Вам, вероятно, следует урезать свой ввод.

Вместо того

str.split(" ")

Ты должен использовать

str.trim().split(" +")

Метод String#trim() удаляет начальные и конечные пробельные символы, которые приводят к вашей ошибке. Кроме того, дополнительный + в RegEx метода String#split(regex) приводит к тому, что программа по-прежнему будет правильно читать ввод и, следовательно, не выйдет из строя, даже если вы используете несколько пробелов в качестве разделителя между числами в нить.

Например, будет работать даже такой ввод:

val str = "   1  2 -54  4 811 33      44 4 321 87   "
0
Impulse The Fox 23 Апр 2018 в 15:12