2016-12-22 162 views
13

我試圖接受來自Kotlin控制檯的輸入,但這很難,因爲我對語法不太確定。在Kotlin閱讀控制檯輸入

我與主要

fun main(args: Array<String>) { 

} 

我應該在這之後進入了麼?我知道println()readline()是涉及,但我不知道如何構造它們。

目的:提示用戶輸入一個數字,輸入的數字乘以6,程序返回結果到控制檯顯示。

+0

這是一門功課? – miensol

+0

@miensol Nope只要我想學習一門新語言 – siur

回答

28

這裏是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) 
} 

當心Scannersomewhat slow。在一些情況下,這可能很重要,例如競爭性編程,其中通過用普通的readLine代替Scanner,程序在大輸入上的執行速度可以提高兩倍。

我總有一天,一個簡潔,跨平臺,高性能,通用的控制檯和文件輸入分析支持將在Kotlin stdlib中引入。像readIntreadLong等全球和Reader擴展功能。


獎金

有時你開始與控制檯輸入/輸出,但這時需要切換到文件。 用文件流變量預先讀取每個讀取或寫入調用變得非常繁瑣。

這裏是科特林魔法和平,允許只是包裝不變控制檯代碼有幾行,以迫使其讀取和寫入文件,也確保他們正確關閉:

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

包裝線可以在發生需要切換回控制檯時快速註釋掉。

+0

謝謝。我可以鏈接到這些嗎? – siur

+0

@siur,https://discuss.kotlinlang。org/t/taking-inputs/152/2, https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.io/read-line.html, https://github.com/JetBrains/ kotlin/blob/master/libraries/stdlib/src/kotlin/io/Console.kt – Vadzim

+0

下面是更多的實例:http://codeforces.com/blog/entry/45454?#comment-300490 – Vadzim

2

使用輸入行()接受來自用戶的輸入, 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") 
    } 
1
fun readInts(separator: Char = ' ') = 
readLine()!!.split(separator).map(String::toInt) 
fun main(args: Array<String>) { 
    var A : List<Int> = readInts() 
}