仕事でKotlin書くことになりました。
今まで基本的にずっとRubyだった(1年弱ですが)ので新鮮な気持ちです。
と、言うことで肩慣らしに「Fizz Buzz」をやってみました。
PaizaにあるFizzBuzz問題を利用して、標準入力がランダムで与えられる前提で書いてます。
動作環境
Kotlin version 1.2.50
kotlinでFizzBuzz
最初に書いてみたのはこれ。
import java.util.Scanner
fun main(args: Array<String>) {
val scan = Scanner(System.`in`).nextLine().toInt()
var i = 1
while( i <= scan ) {
println(
if(i % 15 == 0){
"Fizz Buzz"
}
else if(i % 3 == 0){
"Fizz"
}
else if(i % 5 == 0){
"Buzz"
}
else{
i
}
)
i++
}
}
kotlinでどうループを回すか考えてこうなりました。かなりイマイチです。
そして「面倒」だと思ったの標準入力の取得の箇所。
Rubyだと
input = gets.to_i
みたいに簡単に取れる所ですね。
FizzBuzz(forで書き直し)
ループの部分をforに変えてみました。
for(i in 1..scan) println(
if(i % 15 == 0){
"Fizz Buzz"
}
else if(i % 3 == 0){
"Fizz"
}
else if(i % 5 == 0){
"Buzz"
}
else{
i
}
)
FizzBuzz完成形
IntelliJ IDEAのヒント機能に従ってみるとwhenで書くことも出来ました。
Kotlinでは引数なしでwhenが使えてかなり便利で簡潔に書けそうです。
import java.util.Scanner
fun main(args: Array<String>) {
val randomInt = Scanner(System.`in`).nextLine().toInt()
for(i in 1..randomInt) println(
when {
i % 15 == 0 -> "Fizz Buzz"
i % 3 == 0 -> "Fizz"
i % 5 == 0 -> "Buzz"
else -> i
}
)
}
おわり
参考
JavaのScannerとか.nextLine()の挙動をよく分かってなかった話
https://qiita.com/wing-x/items/187e988125a3bd7b2b32
コメント