見出し画像

Swiftでいこう -- 定番!fizzBuzz

3の倍数のときは「Fizz」と、5の倍数のときは「Buzz」、3と5両方の倍数の場合には「FizzBuzz」と出力させるものです。

func fizzBuzz(_ numberOfTurns: Int) {
   for i in 1...numberOfTurns {
       var result = ""
       
       if i % 3 == 0 {
           result += "Fizz"
       }
       
       if i % 5 == 0 {
           result += (result.isEmpty ? "" : " ") + "Buzz"
       }
       
       if result.isEmpty {
           result += "\(i)"
       }
       
       print(result)
   }
}

まず

fizzBuzz(_ numberOfTurns: Int) で"for i in 1...numberOfTurns"ということなので。

numberOfTurnsまで調べます。

fizzBuzz(15)ですと"15"まで調べて出力します。

変数"result"に調べた結果を入れて行きます。

 var result = ""  

"3"で割り切れるのときは"Fizz"として"result"に追加します。

 if i % 3 == 0 {
          result += "Fizz"
      }

"5"だけで割り切れるのときは"Buzz""3"、"5"で割り切れるときは"Fizz Buzz"を "result"に追加します。

ポイントは(result.isEmpty ? "" : " ")の部分です。先に"i % 3 == 0"であった場合は"result""Fizz"が追加済みであるか判定しています。

追加がない場合、3で割り切れない場合は "" であるので"Buzz"のみを追加します。

3で割り切れる場合はすでに"Fizz"が追加されているので " " スペースを空けて、"Buzz"を追加するので、結果"Fizz Buzz"となって出力されます。

if i % 5 == 0 {
           result += (result.isEmpty ? "" : " ") + "Buzz"
       }

それで、3でも5でも割り切れない場合は "\(i)" ということでそのままの数字を出力します。

 if result.isEmpty {
          result += "\(i)"
      }

fizzBuzz(15)ですと、1から15までの数字をまず"1"を調べて出力、つぎに"2"を調べて、という感じで15まで調べます。

print(result)

結果

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
Fizz Buzz

と表示されます。


この記事が気に入ったらサポートをしてみませんか?