KotlinでPaizaのFizzBuzzやってみた(標準入力)

お仕事でKotlin書くことになりました。今まで基本的にずっとRubyだったので新鮮。

と、言うことで肩慣らしに「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 scan = 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