0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Java】FizzBuzzを出力するときに気をつけるべきこと

Last updated at Posted at 2020-04-15

#FizzBuzzを出力するときに気をつけるべきこと#
##FizzBuzz問題とは##
最初のプレイヤーは「1」、次のプレイヤーは前のプレイヤーの次の数字を言うゲーム

ただし・・・

  • 3で割り切れる場合は「Fizz」
  • 5で割り切れる場合は「Buzz」
  • 両方(すなわち15)で割り切れる場合は「Fizz Buzz」

というルールがあります

FizzBuzz問題は比較的かんたんなプログラムで出力できることから、
初心者プログラマが乗り越えるべき壁となっています
##ひな型になるfor文を書きます##

for(int i = 1;i < 100;i++){
    System.out.println(i);
  }

##上記の意味は?##

  • 整数型(Integer)を宣言
  • 添字「i」を1として初期化
  • iを99(100含まず)までインクリメント(増分)し、
  • インクリメントされた添字iを改行付きで出力する
1
2
3
(中略)
97
98
99

99まで出力されました
##上のコードに手を加える##
文字列「はFizzです」を連結する

for(int i = 1;i < 100;i++){
 System.out.println(i + "はFizzです");
}	

###結果・・・###

1はFizzです
2はFizzです
3はFizzです
4はFizzです
5はFizzです
(中略)
15はFizzです
(中略)
96はFizzです
97はFizzです
98はFizzです
99はFizzです

1も3も15もFizzとなってしまいました
これは「3の倍数なら」「5の倍数なら」「3かつ5の倍数なら」「そうでないなら」という条件分岐をしていないからです
##3の倍数に「Fizz」と出力する##
3の倍数なら「Fizz」、そうでなければ数字を出力するように書き加えます

for(int i = 1;i < 100;i++){
 if(i % 3 == 0){
   System.out.println(i + "はFizzです");
 }
 else{
   System.out.println(i);
 }
}

「i % 3 == 0」は
iを3で割った余りが0
すなわち3の倍数であることを意味します
###結果###

1
2
3はFizzです
4
5
6はFizzです
7
8
9はFizzです
10
(中略)
15はFizzです
16
17
18はFizzです
(中略)
93はFizzです
94
95
96はFizzです
97
98
99はFizzです

##3の倍数、「Fizz」と5の倍数に「Buzz」と出力する##
3の倍数なら「Fizz」5の倍数なら「Buzz」、そうでなければ数字を出力するように書き加えます

for(int i = 1;i < 100;i++){
 if(i % 3 == 0){
   System.out.println(i + "はFizzです");
 }
 else if(i % 5 == 0){
   System.out.println(i + "はBuzzです");
 }
 else{
   System.out.println(i);
 }
}

###結果###

1
2
3はFizzです
4
5はBuzzです
6はFizzです
7
8
9はFizzです
10はBuzzです
11
12はFizzです
13
14
15はFizzです
16

###おや!?###
15がFizzになってる!
これは上の処理で条件が満たされ、下の処理がスキップされるためです
このため、「より狭い」条件から順に書いていくことが必要です

 if(i % 3 == 0){
   System.out.println(i + "はFizzです");   //ココで条件が満たされ、下の処理がスキップされる
 }
 else if(i % 5 == 0){
   System.out.println(i + "はBuzzです");

##3の倍数かつ5の倍数##
3の倍数なら「Fizz」5の倍数なら「Buzz」、そうでなければ数字を出力するように書き加えます
3の倍数と同時に5の倍数を満たすために、条件式を「&&」でつなげます

i % 3 == 0 && i % 5 == 0

##完成!##

for(int i = 1;i < 100;i++){
    if(i % 3 == 0 && i % 5 == 0){
        System.out.println(i + "はFizz Buzzです");
     }
     else if(i % 3 == 0){
        System.out.println(i + "はFizzです");
     }
     else if(i % 5 == 0){
        System.out.println(i + "はBuzzです");
     }
     else{
        System.out.println(i);
     }
}

##結果##

1
2
3はFizzです
4
5はBuzzです
6はFizzです
7
8
9はFizzです
10はBuzzです
11
12はFizzです
13
14
15はFizz Buzzです

ちゃんと15がFizz Buzzと出力されています
いえい!

##ちなみに##
広い条件から書いていくと・・・

 for(int i = 1;i < 100;i++){
        if(i % 3 == 0){
        System.out.println(i + "はFizzです");
        }
        else if(i % 5 == 0){
            System.out.println(i + "はBuzzです");
         }
         else if(i % 3 == 0 && i % 5 == 0){
             System.out.println(i + "はFizz Buzzです");
         }
         else{
            System.out.println(i);
        }
    }

##結果##

1
2
3はFizzです
4
5はBuzzです
6はFizzです
7
8
9はFizzです
10はBuzzです
11
12はFizzです
13
14
15はFizzです

やはり「Fizz」が優先され、おかしなことになるので注意です

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?