解答 - 制御フローの演習

完了

各演習で考えられる解答を見てみしましょう。

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 ステートメントを練習することです。