¿Por qué no puedo agregar dos numbers en Kotlin usando este código fuente?

Este es el código que he creado para agregar dos numbers:

import java.util.* fun main(args: Array<String>) { val (a, u) = readLine()!!.split(' ').map(String::toInt) println(add(a, u)) } fun add(a: Int, u: Int) = a + u 

Sin embargo sigo recibiendo este error:

 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 Kotlin_learnKt.main(kotlin^learn.kt:6) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) Process finished with exit code 1 

No estoy seguro de lo que estoy haciendo mal. Solo quiero pedirle al usuario que ingrese dos numbers, hacer que el código los agregue y luego devolver el resultado.

Desde el trazado de la stack de exception lanzada, no parece que readLine() nada, por lo que readLine() devuelve la cadena vacía que no se puede analizar como un valor int.

Recomiendo leer cada valor int por separado mientras solucionas los problemas:

 fun readInt(message: Any?): Int { print(message) return readLine()!!.toInt() } val a = readInt("a = ") val u = readInt("u = ") println("a + u = ${a + u}") 

O si quieres ser elegante:

 fun readInt(message: Any?): Int { val promptSequence = generateSequence( seedFunction = { print(message) readLine() }, nextFunction = { invalidInput -> println("Input '$invalidInput' is not an int value. Try again.") print(message) readLine() } ) return promptSequence.map(::Scanner).first(Scanner::hasNextInt).nextInt() } val a = readInt("a = ") val u = readInt("u = ") println("a + u = ${a + u}") 
 import java.util.Scanner fun main(vararg args: String) { val input = Scanner(System.`in`) val a = input.nextInt() val b = input.nextInt() println(a + b) } 
  • Implementando una interfaz de kotlin en java
  • ¿Cuál es la diferencia entre el operador "como" y "es" en Kotlin?
  • Archivo de activos abiertos de Android Kotlin
  • no se pudo crear una instancia de extensión de complemento gradle
  • Error Kotlin: reference no resuelta: fusionar (para list.merge ())
  • Construyendo un proyecto de Kotlin + Java 9 con Gradle
  • Escriba inferencia con initialization diferida y método de fábrica genérico en Kotlin
  • Async Spring Boot con Kotlin no funciona
  • Advertencia de Android Studio Kotlin Compiler
  • Kotlin Constructor Crash
  • forma correcta de ejecutar la aplicación kotlin desde la tarea gradle