は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)
}
Scannerがsomewhat slowであることに注意してください。これは、競合プログラミングのように、Scannerを単にreadLineに置き換えるだけで、大きな入力に対するプログラムの実行を2倍高速化できる場合のように重要な場合があります。
I hopeいつか、コンソールとファイルの両方の入力パースサポートのための簡潔な、クロスプラットフォームの、パフォーマンスのよい、普遍的なものがKotlin stdlibに導入されました。 readInt
、readLong
など、グローバルと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の魔法の平和ですコンソールに切り替える必要が生じたときにすぐにコメントアウトしました。
これは宿題ですか? – miensol
@miensol Nopeただ私が新しい言語を学ぼうとしています – siur