web-dev-qa-db-fra.com

Entrée de la console de lecture en Kotlin

J'essaie d'accepter les entrées de la console de Kotlin mais c'est difficile car je ne suis pas trop sûr de la syntaxe. 

Je commence par le principal 

fun main(args: Array<String>) {

}

QUE devrais-je entrer après cela? Je suis conscient que les println() et readline() sont impliqués mais je ne sais pas comment les structurer. 

Objectif: Demander à l’utilisateur de saisir un nombre, le nombre entré étant multiplié par 6, le programme renvoie le résultat à la console. 

24
siur

Voici des exemples A + B dans Kotlin lisant stdin:

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

ou

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

ou 

fun readInts(separator: Char = ' ') = readLine()!!.split(separator).map(String::toInt)

fun main(vararg args: String) {
  val (a, b) = readInts()
  println(a + b)
}

ou 

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

ou

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

Attention: Scanner est un peu lent . Cela peut être important dans certains cas, comme dans le cas de la programmation concurrentielle, où l'exécution du programme sur de grandes entrées peut être accélérée jusqu'à deux fois plus simplement en remplaçant Scanner avec plain readLine .

Je espère un jour, un support d’analyse syntaxique concise, multi-plateforme, performant et universel sera introduit dans Kotlin stdlib. Comme les fonctions d'extension readInt, readLong, etc global et Reader.


Prime

Parfois, vous commencez avec une entrée/sortie de console, mais vous devez ensuite passer aux fichiers . Il devient trop fastidieux de prévoir chaque appel en lecture ou en écriture avec une variable de flux de fichier.

Voici une paix de la magie Kotlin qui permet d’envelopper du code de console non modifié avec quelques lignes pour le forcer à lire et à écrire dans des fichiers tout en garantissant qu’ils sont correctement fermés:

fun <T : Closeable, R> T.useWith(block: T.() -> R): R = use { with(it, block) }

File("a.in").bufferedReader().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)
    }
}

Les lignes de bouclage peuvent être rapidement commentées quand il est nécessaire de revenir à la console.

51
Vadzim

Utilisez readLine () pour prendre les entrées de l'utilisateur, 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") 
    }
3
sohel yadav
fun readInts(separator: Char = ' ') = 
readLine()!!.split(separator).map(String::toInt)
fun main(args: Array<String>) {
    var A : List<Int> = readInts()
}
2
Bihy

Par défaut, readLine accepte les entrées sous forme de chaîne ToInt peut être utilisé pour la convertir en entier. 

fun main(args:Array<String>){
    var first: Int
    var second: Int
    println("Enter the first number")
    first = readLine()!!.toInt()
    println("Enter the second number")
    second= readLine()!!.toInt()
    println("The sum is ${first + second}")
}
0