在Kotlin阅读控制台输入

我试图接受来自Kotlin控制台的输入,但这很难,因为我不太确定语法。

我从主要开始

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

这之后我应该输入什么? 我知道, println()readline()都涉及到,但我不知道如何构造它们。

目标:提示用户输入一个数字,输入的数字乘以6,程序返回结果到控制台显示。

这里是Kotlin的A + B例子:

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

要么

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

要么

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

要么

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

要么

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

当心扫描仪 有点慢 。 这在某些情况下可能很重要,例如竞争性编程,只要将扫描器替换为简单的readLine ,即可使程序在大型输入上的执行速度提高两倍。

我希望有一天,在Kotlin stdlib中会引入一个对控制台和文件输入解析支持的简洁,跨平台,高性能,通用的方法。


奖金

有时你从控制台输入/输出开始,但是需要切换到文件。 用文件流变量前置每个读取或写入调用变得非常繁琐。

这是一个Kotlin魔术的和平,它允许用几行代码来包装不变的控制台代码,强制它读取和写入文件,同时确保它们被正确关闭:

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

当需要切换回控制台时,包装线可以快速注释掉。

使用readLine()从用户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() } 
Interesting Posts