解答 - 制御フローの演習
各演習で考えられる解答を見てみしましょう。
FizzBuzz プログラムを作成する
switch
ステートメントを使用する演習の解答は次のようなものです。
package main
import (
"fmt"
"strconv"
)
func fizzbuzz(num int) string {
switch {
case num%15 == 0:
return "FizzBuzz"
case num%3 == 0:
return "Fizz"
case num%5 == 0:
return "Buzz"
}
return strconv.Itoa(num)
}
func main() {
for num := 1; num <= 100; num++ {
fmt.Println(fizzbuzz(num))
}
}
FizzBuzz
の場合、結果は3 と 5 で割り切れるため、3 と 5 を乗算します。 AND
条件を使用して、数が 3 と 5 で割り切れるかどうかを調べることもできます。
素数を見つける
20 未満の素数を見つける演習の解答は、次のようになります。
package main
import "fmt"
func findprimes(number int) bool {
for i := 2; i < number; i++ {
if number % i == 0 {
return false
}
}
if number > 1 {
return true
} else {
return false
}
}
func main() {
fmt.Println("Prime numbers less than 20:")
for number := 1; number <= 20; number++ {
if findprimes(number) {
fmt.Printf("%v ", number)
}
}
}
main
関数で、1 から 20 までループし、findprimes
関数を呼び出して、現在の値を調べます。 findprimes
関数では、for
ループを 2 から始めて、カウンターが number
の値を超えるまで繰り返します。 number
がカウンターで割り切れる場合、number
は素数ではありません。 終了せずにループを完了した場合、値は 1 か素数のいずれかです。
出力は次のようになります。
Prime numbers less than 20:
2 3 5 7 11 13 17 19
数を尋ねて、負の場合はパニックにする
panic
の呼び出しを試す演習の解答は次のようになります。
package main
import "fmt"
func main() {
val := 0
for {
fmt.Print("Enter number: ")
fmt.Scanf("%d", &val)
switch {
case val < 0:
panic("You entered a negative number!")
case val == 0:
fmt.Println("0 is neither negative nor positive")
default:
fmt.Println("You entered:", val)
}
}
}
思い出してください。目的は無限ループと switch
ステートメントを練習することです。