¿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) } 
  • Variable opcional de class de datos de Kotlin
  • No puedo permitir que mi aplicación use el permiso dibujar sobre otras aplicaciones
  • Clase de datos de Kotlin, sala de Android y setter personalizado
  • Kotlin Kapt no muestra errores de data binding cuando se ejecuta desde Android Studio
  • Plantillas que escapan en cadenas multilínea Kotlin
  • Sala (AAC): Error SQL o database faltante (cerca de "grupo": error de syntax)
  • El uso de la propiedad NewApi sigue causando advertencias sobre la pelusa
  • ¿Por qué Smart Cast falla por el valor anulable después de establecer el valor y verificar si es nulo?
  • ¿Cómo probar el método del presentador en base a un valor devuelto por Observable?
  • El tipo de propiedad no es un tipo de excedente
  • ¿Cómo agregar una vista gráfica en Android usando Kotlin?