Dimです。今日はプログラム問題で有名なFizzBuzzについての記事です。
この記事ではfor文とArrayListでFizzBuzzを書いてみます。
FizzBuzzとは?-ルール
FizzBuzzプログラムはプログラミング初級者に出されることが多い問題です。ルールとしては、
- 1から100までの数字を画面に表示する
- 3の倍数のときは数字の代わりにFizzと表示する
- 5の倍数のときは数字の代わりにBuzzと表示する
- 15の倍数のときは数字の代わりにFizzBuzzと表示する
の条件があり、これを満たしたプログラムを書け、という問題です。
僕も大学の頃C言語の授業で出されたような記憶があります。
皆さんの中にも「やったことがある」という人が多いのではないでしょうか。
for文での解答例
実際にコードを書いていきます。for文とif文を使います。
100まで出力すると長すぎて見づらいので出力結果は省略します。
サンプルコードと出力結果
サンプルコードを以下に示します。
public class FizzBuzzTest { public static void main(String[] args) { int i; for (i = 1; i <= 100; i++) { //15で割り切れる時FizzBuzzと出力する if (i % 15 == 0) { System.out.print("FizzBuzz"); //3で割り切れる時Fizzと出力する } else if (i % 3 == 0) { System.out.print("Fizz"); //5で割り切れる時Buzzと出力する } else if (i % 5 == 0) { System.out.print("Buzz"); //それ以外はそのまま出力する } else { System.out.print(i); } System.out.print(" "); } } }
サンプルコードの出力結果は下の様になります。(改行は見やすくするため勝手に施しました)
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz //以下省略
この問題は色々と解答方法がありますが、上のコードは一番ノーマルな書き方です。
この問題では「if文と%演算子を使って倍数の判定ができるか」が問われています。初級者にとってはアルゴリズムの登竜門ですね。
ArrayListで出力する
上のやり方だけだとちょっと物足りないのでString型のArrayListに入れて出力する方法も考えてみました。
ArrayListとaddメソッドでFizzBuzzを配列に入れていきますが、整数はそのままだとString型に入らないのでint型からString型に変換する必要があります。
ここではString.valueOf()メソッドを使います。
サンプルコードと出力結果
サンプルコードを以下に示します。
import java.util.ArrayList; public class FizzBuzzTest2 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); int i; for (i = 1; i <= 100; i++) { if (i % 15 == 0) { list.add("FizzBuzz"); } else if (i % 3 == 0) { list.add("Fizz"); } else if (i % 5 == 0) { list.add("Buzz"); } else { //変数iをint型からString型に変換する list.add(String.valueOf(i)); } } System.out.println(list); } }
サンプルコードの出力結果は次の様になります。(改行は見やすくするため勝手に施しました)
[1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, 16, 17, Fizz, 19, Buzz, Fizz, 22, 23, Fizz, Buzz, 26, Fizz, 28, 29, FizzBuzz, //以下省略
最初と同じ結果が出力されました。
まとめ
今回やったことのまとめです。
ポイント
- FizzBuzzはプログラミング初級者向けのアルゴリズム問題
- 条件を変えることで色々な書き方を考えられる
この問題は多くのパターンがあるようですね。皆さんもやってみましょう!