2016-12-22 44 views
13

コンソールからの入力をKotlinで受け入れようとしていますが、構文についてあまりよく分からないので難しいです。Kotlinでコンソール入力を読み取る

私はこの後に入力する必要がありますWHATメイン

fun main(args: Array<String>) { 

} 

で始まりますか?私はprintln()readline()が関与していることを認識していますが、それらをどのように構造化するのか分かりません。

目的:数字を入力するようにユーザに促し、入力された数字に6を掛け、結果をコンソールディスプレイに返す。ここ

+0

これは宿題ですか? – miensol

+0

@miensol Nopeただ私が新しい言語を学ぼうとしています – siur

答えて

28

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

Scannersomewhat slowであることに注意してください。これは、競合プログラミングのように、Scannerを単にreadLineに置き換えるだけで、大きな入力に対するプログラムの実行を2倍高速化できる場合のように重要な場合があります。

I hopeいつか、コンソールとファイルの両方の入力パースサポートのための簡潔な、クロスプラットフォームの、パフォーマンスのよい、普遍的なものが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) 
    } 
} 

ラッピングラインができ:ここでは

はまた、彼らが適切に閉じられるようにだけ読んで、ファイルへの書き込み、それを強制的に行のカップルと変わらず、コンソールコードをラップすることができますKotlinの魔法の平和ですコンソールに切り替える必要が生じたときにすぐにコメントアウトしました。

+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

利用の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") 
    } 
1
fun readInts(separator: Char = ' ') = 
readLine()!!.split(separator).map(String::toInt) 
fun main(args: Array<String>) { 
    var A : List<Int> = readInts() 
} 
関連する問題