仕事で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
コメント