Go練習問題2-06:無限ループを理解しよう

記事内に商品プロモーションを含む場合があります

Go言語の初心者向け問題2-6:無限ループを理解しよう

この問題を解くために必要な知識:
レベル1の知識論理演算子と代入演算子条件分岐(if-else文)条件分岐(switch文)ループ処理(for文)ラベルとgoto文無限ループ配列スライスとキャパシティ整列と検索マップループ処理(range文)サードパーティパッケージ

<<前の問題 問題集Top 次の問題>>

Go言語の文法「無限ループ」とは





ここでは無限ループの意味や使い方を復習します。必要ない方はここをクリックして練習問題へ飛びましょう。

無限ループとは?

無限ループとは、その名の通り、終了条件がないか、常に真の条件によって永遠に繰り返されるループです。

プログラムが正常に終了しないため、通常はエラーや意図しない動作を引き起こしますが、特定の条件下では必要な場合もあります。

Go言語で無限ループを作成する

Go言語では、無限ループを簡単に実装できます。以下のコードは、典型的な無限ループの例です。

package main

import "fmt"

func main() {
    for {
        fmt.Println("これは無限ループです")
    }
}

コードの解説

  1. for文
    • Go言語では、forループを使って無限ループを作成します。他の言語ではwhileを使用することが多いですが、Goではforが唯一のループ構文です。forキーワードの後に何も書かないことで、終了条件が存在しない無限ループが作られます。
  2. fmt.Println
    • fmt.Printlnは、文字列を標準出力に表示します。この例では、無限ループ内で「これは無限ループです」というメッセージが繰り返し表示されます。

無限ループの使い所

無限ループは、サーバーの待機状態や、特定の条件が満たされるまで繰り返す処理に使われます。

ただし、制御が失われないようにブレイク条件やbreak文を組み込むことが重要です。

例えば、以下のコードでは、ユーザーがexitと入力するまでメッセージを繰り返し表示します。

package main

import "fmt"

func main() {
    for {
        var input string
        fmt.Print("終了するには 'exit' と入力してください: ")
        fmt.Scanln(&input)

        if input == "exit" {
            break
        }
    }
    fmt.Println("プログラムが終了しました。")
}

まとめ

無限ループは強力ですが、慎重に使わなければなりません。誤った使用はプログラムが停止しない原因となりますが、適切に制御することで非常に有用です。

Go言語での無限ループの使い方をしっかりと理解し、必要な場面で活用してください。

Go練習問題2-6:無限ループと条件分岐を学ぼう

カウントアップするプログラムを作成してください。

無限ループを使用し、カウントが10に達したらループを終了するように条件分岐を使います。

この問題の要件

以下の要件に従ってコードを完成させてください。

  • 無限ループを作成し、カウント変数を毎回1ずつ増加させること。
  • カウントが10に達したら、条件分岐を使ってループを終了すること。
  • 結果を標準出力に表示すること(例: “現在のカウント: 0”, “カウントが10に達したため、ループを終了します。”)。

ただし、以下のような実行結果となるコードを書くこと。

*****↓↓正解コードの実行結果の例↓↓*****

現在のカウント: 0
現在のカウント: 1
現在のカウント: 2
現在のカウント: 3
現在のカウント: 4
現在のカウント: 5
現在のカウント: 6
現在のカウント: 7
現在のカウント: 8
現在のカウント: 9
カウントが10に達したため、ループを終了します。

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。

1.import文の使用
2.main関数
 2-1. count変数の宣言と初期化
 2-2. 無限ループの開始
  2-2-1. 現在のカウントを標準出力
  2-2-2. countを1増やす
  2-2-3. カウントが10に達したかの条件分岐
   2-2-3-1. ループを終了するためのbreak文
 2-3. プログラムの終了

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

package main

import (
	"fmt"
)

func main() {
	// 無限ループを使用するコードの例

	// 変数の宣言
	var count int = 0 // 変数countを整数型で宣言し、初期化します

	// 無限ループの開始
	for {
		// 現在のカウントを表示
		fmt.Printf("現在のカウント: %d\n", count)

		// カウントを1増やす
		/*【穴埋め問題1】
		ここにカウント変数を1増やすコードを書いてください。
		*/

		// 条件分岐: カウントが10に達したらループを終了する
		if count >= 10 {
			fmt.Println("カウントが10に達したため、ループを終了します。")
			/*【穴埋め問題2】
			ここにループを終了するコードを書いてください。
			*/
		}
	}
}

 

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

解答例

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

package main

import (
	"fmt"
)

func main() {
	// 無限ループを使用するコードの例

	// 変数の宣言
	var count int = 0 // 変数countを整数型で宣言し、初期化します

	// 無限ループの開始
	for {
		// カウントを表示
		fmt.Printf("現在のカウント: %d\n", count)

		// カウントを1増やす
		count++

		// 条件分岐: カウントが10に達したらループを終了する
		if count >= 10 {
			fmt.Println("カウントが10に達したため、ループを終了します。")
			break // ループを終了するためにbreakを使用
		}
	}
}

正解コードの解説

このコードは、Go言語で無限ループと条件分岐を学ぶためのものです。以下のコードブロックごとにその内容を解説します。

パッケージ宣言とインポート

package main

import (
    "fmt"
)

package main は、Goプログラムのエントリーポイントを示します。mainパッケージは、プログラムを実行するための特別なパッケージです。

import "fmt" は、標準入力と出力を扱うためのfmtパッケージをインポートします。これにより、文字列の出力が可能になります。

メイン関数

func main() {

func main() は、Goプログラムのエントリーポイントであるメイン関数を定義します。プログラムが実行されると、最初にこの関数が呼び出されます。

変数の宣言と初期化

var count int = 0 // 変数countを整数型で宣言し、初期化します

var count int = 0 は、整数型の変数countを宣言し、初期値として0を設定します。この変数はループ内でカウントを保持します。

無限ループ

for {
    // カウントを表示
    fmt.Printf("現在のカウント: %d\n", count)

for { ... } は無限ループを作成します。forキーワードに条件がないため、このループは永久に繰り返されます。

fmt.Printf("現在のカウント: %d\n", count) は、count変数の現在の値を表示します。

カウントの増加

    count++

count++ は、countの値を1増やします。これにより、次回のループで新しい値が表示されます。

条件分岐とループの終了

if count >= 10 は、countが10以上になったかをチェックする条件分岐です。

fmt.Println("カウントが10に達したため、ループを終了します。") は、ループが終了する前にメッセージを表示します。

break は、無限ループを強制的に終了するために使用されます。これにより、countが10に達した時点でループが終了します。

<<前の問題 問題集Top 次の問題>>

この問題への質問・コメント

この問題を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Go練習問題集へ戻る
    トップページへ戻る