MENU

【Java】FizzBuzz 問題

目次

はじめに

今回は、プログラミング初学者の登竜門?FizzBuzz問題について触れたいと思います。

そもそも、FizzBuzz問題とは何なのでしょうか。

簡単に説明致しますと、数字を1から順番に数えていき、3で割り切れるときは”Fizz“, 5で割り切れるときは”Buzz“, 両方で割り切れるときは”FizzBuzz“と言っていく、単純な数字遊びのゲームです。

これをプログラミングでプログラムしてみましょうというのが、FizzBuzz問題
個人的に、スタンダードな解答だと順次・ループ・条件分岐3要素が絡んでくるので”良問“だと思っています。

もちろん、解ければそれでいいのですが、なるべくsimpleかつ美しく書くことを意識したいものです。

↓O師匠に紹介して頂いた参考記事です。

解答例

今回は、Javaでどう書けるのか、色々なパターンの解答を調べてみました。(1から30までの数字で)

ラムダ式や三項演算子を使うとsimpleに書けていい感じになりますが、私にはまだ難しい。。。

以下がコードになります。

実行結果

12Fizz4BuzzFizz78FizzBuzz11Fizz1314FizzBuzz1617Fizz19BuzzFizz2223FizzBuzz26Fizz2829FizzBuzz


①スタンダードな解答

public class FizzBuzz {
    public static void main(String[] args) {
        // for文と条件分岐を使った書き方
        for ( int i = 1; i <= 30; i++ ) {
            if ( i % 3 == 0 && i % 5 == 0 ) System.out.print("FizzBuzz");
            else if ( i % 3 == 0 ) System.out.print("Fizz");
            else if ( i % 5 == 0 ) System.out.print("Buzz");
            else System.out.print(i);
        }
    }
}

②その他の解答 1

import java.util.*;
import java.util.stream.IntStream;

class FizzBuzz {
    public static void main(String[] args) {
      IntStream.rangeClosed(1, 30).forEach(
      i -> System.out.format("%s%s",
                          (i % 3 == 0 ? "Fizz": ""),
                          (i % 5 == 0 ? "Buzz": (i % 3 == 0 ? "" : i))
           )
      );
    }
}

③その他の解答 2

import java.util.*;
import java.util.stream.IntStream;

class FizzBuzz {
        public static void main(String[] args) {
            IntStream.rangeClosed(1, 30).mapToObj(
                i -> i % 3 == 0 ?
                        (i % 5 == 0 ? "FizzBuzz" : "Fizz") :
                        (i % 5 == 0 ? "Buzz" : i))
                .forEach(System.out::print);
        }
}

④その他の解答 3

import java.util.*;
import java.util.stream.IntStream;

class FizzBuzz {
        public static void main(String[] args) {
            IntStream.rangeClosed(1, 30)
                  .mapToObj(i -> i % 15 == 0 ? "FizzBuzz" : i % 5 == 0 ? "Buzz" : i % 3 == 0 ? "Fizz" : i)
                  .forEach(System.out::print);
        }
}

最後に

いかがでしたでしょうか。問題一つとってみても様々な解答が出てきて面白いですよね。

皆様もぜひ、自分独自のオリジナルな解答を追求してみて下さい。(笑)

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次