Entrada de console de lectura en Kotlin

Intento aceptar la input de la console en Kotlin, pero es difícil porque no estoy muy seguro de la syntax.

Comienzo con el principal

fun main(args: Array<String>) { } 

¿A qué debo ingresar después de esto? Soy consciente de que println() y readline() están involucrados pero no sé cómo estructurarlos.

Objetivo: indicar al usuario que ingrese un número, el número ingresado se multiplica por 6, el progtwig devuelve el resultado a la pantalla de la console.

Aquí hay ejemplos A + B en Kotlin:

 fun main(vararg args: String) { val (a, b) = readLine()!!.split(' ') println(a.toInt() + b.toInt()) } 

o

 fun main(vararg args: String) { val (a, b) = readLine()!!.split(' ').map(String::toInt) println(a + b) } 

o

 fun readInts(separator: Char = ' ') = readLine()!!.split(separator).map(String::toInt) fun main(vararg args: String) { val (a, b) = readInts() println(a + b) } 

o

 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) } 

o

 with(Scanner(System.`in`)) { val a = nextInt() val b = nextInt() println(a + b) } 

Tenga cuidado de que Scanner sea algo lento . Esto puede ser importante en algunos casos, como la progtwigción competitiva, donde la ejecución del progtwig en grandes inputs podría ser hasta dos veces más rápida simplemente reemplazando Scanner con plain readLine .

Espero que algún día se presente un Kotlin stdlib conciso, multiplataforma, performance y universal para el soporte de análisis de input de la console y los files. Como las funciones de extensión readInt , readLong , etc global y Reader .


Prima

Algunas veces comienza con la input / salida de la console, pero luego necesita cambiar a los files. Se vuelve demasiado tedioso preceder cada llamada de lectura o escritura con la variable de flujo de files.

Aquí hay una paz de la magia de Kotlin que permite simplemente envolver el código de la console sin cambiar con un par de líneas para forzarlo a leer y escribir en los files y también garantizar que estén cerrados correctamente:

 fun <T : Closeable, R> T.useWith(block: T.() -> R): R = use { with(it, block) } File("a.in").buffenetworkingReader().useWith { File("a.out").printWriter().useWith { val (a, b) = readLine()!!.split(' ').map(String::toInt) println(a + b) } } Scanner(File("b.in")).useWith { PrintWriter("b.out").useWith { val a = nextInt() val b = nextInt() println(a + b) } } 

Las líneas de envoltura se pueden comentar rápidamente cuando ocurre la necesidad de volver a la console.

Use readLine () para tomar input del usuario, ATQ:

  fun main(args:Array<String>){ print("Enter a number") var variableName:Int = readLine()!!.toInt() // readLine() is used to accept the String value and ".toInt()" will convert the string to Int. var result:Int= variableName*6 print("The output is:$result") } 
 fun readInts(separator: Char = ' ') = readLine()!!.split(separator).map(String::toInt) fun main(args: Array<String>) { var A : List<Int> = readInts() }