✍️

ProgateのJava Ⅱ修了レベルでFizzBuzzに挑戦してみた

2022/06/16に公開

「Progateの無料範囲(Java Ⅱまで)だけでもJavaでFizzBuzz問題が解けるのでは?」と
感じたので、実際にしてみました。

先に結論

for文、if文、else if文、else文ができれば、解けます。

今回のルール

  • 0から100までの整数の中でFizzBuzzゲームをする
  • FizzBuzzゲームのルール
     1から順番に数字を数える中で
  1. 3で割り切れる整数が出てきたら、数字の代わりに「Fizz」と表示
  2. 5で割り切れる整数が出てきたら、数字の代わりに「Buzz」と表示
  3. 3と5の両方でも割り切れる整数が出てきたら、数字の代わりに「Fizz Buzz」と表示
  4. 1~3の条件に当てはまらない数字は「Fizz Buzz、Fizz、Buzz」は表示せず、その数字を表示

記載する処理と考え方

  1. まず1から整数で100まで表示する処理をfor文で記載する
    • 整数iをint i = 1;で初期化
    • i <= 100;で整数iが100以下になるようにする
    • i++のインクリメント演算子で1ずつ数字が足されていくようにする
 for (int i = 1; i<=100; i++)
  1. FizzBuzzゲームをif文、else if文、else文で処理できるよう記載する
     Javaは記載された順に処理をしていくので最初に「(3 * 5)で割り切れる整数の時の処理」
    最後に「(3 * 5)、3、5のどの数字でも割り切れない整数の時の処理」を記載します。

① if文で『i % (3 * 5) == 0 の時、Fizz Buzzと表示する』処理を書く

if (i % (3 * 5) == 0 ){
    System.out.println("Fizz Buzz");
}
(i % 15 == 0)ではなく(i % (3 * 5) == 0)と記載した理由

FizzBuzzのルールで提示された数字を使う方が良いのではと考えたためです。
今回のような3と5という小さい数であれば、なぜ除数を15にしたかと問われた際に
『3と5の最小公倍数は15であるため、除数を15にした』
と説明できます。
 しかし、応用で桁数の多い数字を提示された場合に
『除数にルール内に存在しない数字を指定しているが根拠は何か』
と聞かれた場合、証明するのが面倒だと思います。
(ユークリッドの互除法で最小公倍数を求める処理を組み込めばいい話ですが)

「なぜその除数を使ったのか、すぐ分かるように記載した方が楽そう」という素人の考えです。

② else if文で『(i % (3 * 5) == 0)ではないが(i % 3 == 0)の時、Fizzと表示する』処理を書く

else if (i % 3 == 0)  {
   System.out.println("Fizz");
}

③ else if文で『(i % (3 * 5) == 0)、(i % 3 == 0)ではないが(i % 5 == 0)の時、Buzzと表示する』処理を書く

else if (i % 5 == 0)  {
   System.out.println("Buzz");
}

④ else 文で『iが(i % (3 * 5) == 0)、(i % 3 == 0)、(i % 5 == 0)のどれでもない時、iの数字を表示する』処理を書く

else {
System.out.println( i );
}

クラス名はそのまま【Fizzbuzz】
どこからでも参照できるように【public】
インスタンス化しなくても外部から使えるように【static】
メソッドの処理結果を呼び出した場所に戻す必要がないので【void】
メソッド名は、このメソッドがこのクラスの中心なので【main】
引数をString型の配列で受け取りたいので【String[]】
引数の名前は慣習的に【args】
とし、上記の処理をクラス内にメソッドとして記載。

public class Fizzbuzz{
   public static void main(String[]  args){
      for (int i = 1; i<=100; i++){
        if (i % (3 * 5) == 0 ){
          System.out.println("Fizz Buzz");
        }else if (i % 3 == 0)  {
          System.out.println("Fizz");
        }else if (i % 5 == 0)  {
          System.out.println("Buzz");
        }else {
          System.out.println( i );
        }
      }
    }

}

出力結果はこちら

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
Fizz Buzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
Fizz Buzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
Fizz Buzz
46
47
Fizz
49
Buzz
Fizz
52
53
Fizz
Buzz
56
Fizz
58
59
Fizz Buzz
61
62
Fizz
64
Buzz
Fizz
67
68
Fizz
Buzz
71
Fizz
73
74
Fizz Buzz
76
77
Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
Fizz Buzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz

とりあえず超初心者でもJavaでFizzbuzz問題が解けることが分かりました。

Discussion