すずしんろぐ

読者です 読者をやめる 読者になる 読者になる

すずしんろぐ

人生大逆転を目指す、鈴木俊吾の成長日記

Kotlin プログラミングの基本「FizzBuzz問題」を解いてみた

f:id:Suzushin:20170429140030j:plain

おはようございます、すずしんです。

Kotlinが私の中でマイブームです。
そのため、最近はもっぱらKotlinの勉強をしています。
今日は何か基本的なプログラムでも書こうと思いたち、どんなプログラムを書こうかと悩んだ結果…。
今回は、プログラミングの基本的な練習問題である「FizzBuzz問題」をKotlinで解いてみることにしました。

FizzBuzz問題とは?

FizzBuzz問題というのは、1から100まで順番に数字または指定の文字列を出力する問題です。
3の倍数の時は「Fizz」、5の倍数の時は「Buzz」、3の倍数かつ5の倍数の時は「FizzBuzz」と出力します。
その他の場合は数字を出力します。

具体的な例としては、以下のようになります。

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
...
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz

FizzBuzz問題の考え方

FizzBuzz問題は、基本的にif文とループが理解できて、それらを正しく使う事ができれば問題無く解けると思います。

ある数字nが3の倍数であるかどうかを判定するには、剰余(%)を使って以下のように書きます。

if(n % 3 == 0) {
  ...
}

同様にして、数字nが5の倍数であるかどうかは以下のように書けますね。

if(n % 5 == 0) {
  ...
}

3の倍数かつ5の倍数の場合には、&&で条件をつなげます。

if(n % 3 == 0 && n % 5 == 0) {
  ...
}

実際のプログラム上では、まず3の倍数かつ5の倍数であるかを確認します。
その後、else if文を使って3の倍数または5の倍数であるかどうかを確認します。
それらのどれにも該当しない場合がelse文になります。
具体的には、以下のような感じですね。

if(n % 3 == 0 && n % 5 == 0) {
  ...
}
else if(n % 3 == 0) {
  ...
}
else if(n % 5 == 0) {
  ...
}
else {
  ...
}

1から100までループさせるには、やり方が色々とありますが…。
ここではfor文を使ってみます。
Kotlinでは例えば以下のように書けます。

for(n in 1..100) {
  ...
}

FizzBuzz問題のプログラムのソースコード(Kotlin)

以上を踏まえて、Kotlin版FizzBuzz問題のプログラムのソースコードは以下のようになりました。

fun main(args: Array<String>) {
    for(n in 1..100) {
        val fizz = (n % 3 == 0)
        val buzz = (n % 5 == 0)
        val result = if(fizz && buzz) "FizzBuzz"
            else if(fizz) "Fizz"
            else if(buzz) "Buzz"
            else "$n"
        println(result)
    }
}

ポイントとしては、倍数確認の結果を変数fizz,buzzに代入しているところでしょうか。
そのfizz,buzzの結果をif文で参照して出力するべき文字列をresultに代入します。
そして、resultをprintln()で出力します。

nが3の倍数であれば、fizzの値はtrueになります。
nが5の倍数であれば、buzzの値はtrueになります。
nが3の倍数かつ5の倍数の時というのは、fizzの値がtrueかつbuzzの値がtrueの時にtrueになります。
else文が実行されるのは、これらのいずれにも該当しない時ですね。
つまり、fizzとbuzzがfalseの時という事になります。

プログラムの実行結果

上記プログラムの実行結果は以下のようになります。
正しく問題の条件のとおりに出力されているのが分かります。

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
...
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz

ひとこと

今回は、KotlinでFizzBuzz問題を解いてみましたが…。
特にこれといった問題はありませんね。
比較的サクッと解くことができましたよ。

このFizzBuzz問題は、プログラミング言語を学習し始めた頃に取り組むと良いと思います。
もしあなたがプログラミングを習いたてなら…。
ぜひこのFizzBuzz問題を、学習中のプログラミング言語で解いてみてはいかがでしょうか?

読者の方の中には、もしかするとプログラミングをやったことがない方がいるかもしれませんね。
でも、何となく今回のプログラムの内容が分かるような気がしませんか?
この記事の内容が理解できれば、あなたは既にプログラミングの入門ができていると思いますよ。
ちょっと勉強すれば、きっとプログラミングが楽しめる域まで行けるようになります。
もし良かったら、あなたもプログラミングの世界に飛び込んでみませんか?
私にできる範囲であればサポートしますよっ!

プログラミングは私の好きな分野ですので…。
今後もプログラミング関連の記事を書くことが多くなるかもしれません。
これらの記事を通して、少しでもプログラミングに興味を持ってくれる人が増えてくれたら嬉しいですね。

関連記事

www.suzushin7.jp