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.
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.
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")
}
fun readInts(separator: Char = ' ') =
readLine()!!.split(separator).map(String::toInt)
fun main(args: Array<String>) {
var A : List<Int> = readInts()
}
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}")
}