Menu
CoddyTech

ネストされたループからの Break

CoddyのGOジャーニー「論理とフロー」セクションの一部。レッスン 2/68。

ネストしたループを扱うとき、通常のbreak文では最も内側のループからしか抜けられません。しかし、Goではラベルを使って外側のループから直接抜けられるため、複雑なループ構造を正確に制御できます。

ラベルとは、識別子の後にコロンを付けたもので、ループの前に配置します。その後、breakの後にラベル名を指定すると、ネストされたループの中からでも、その特定のループを終了できます。

outer:
for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        if i == 1 && j == 1 {
            break outer
        }
        fmt.Printf("i=%d, j=%d\n", i, j)
    }
}

この例では、条件 i == 1 && j == 1 が満たされると、break outer によって内側と外側の両方のループから直ちに抜けます。これは、探しているものが見つかった時点で検索全体を終了したい場合に、2次元データ構造を検索するときに特に便利です。

challenge icon

チャレンジ

簡単

このチャレンジでは、2次元グリッドを検索する際に、ラベル付きのbreak文を使って入れ子になったループを終了する練習をします。グリッド内の特定の数値を見つけ、その数値が見つかったらすぐに検索を止めます。

次の2つの入力が与えられます。

  • グリッドのサイズを"rows,cols"形式で表す文字列(例:"3,4")
  • 検索する対象の数値を表す文字列(例:"7")

次の数値の2次元グリッドが与えられています。

grid := [][]int{
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12},
}

あなたのタスクは次のとおりです。

  1. 上のコードですでに読み込まれている値を使用します。rowsとcols(検索するグリッドの範囲)、target、およびgridを使います。
  2. ラベル付きのbreakを使った入れ子のループで、グリッドを検索します。
  3. 対象の数値が見つかったら、"Found [target] at position ([row], [col])"を出力し、ラベル付きのbreakを使って両方のループをすぐに終了します。
  4. 対象の数値が見つからずに検索が完了した場合は、"Target [target] not found"を出力します。

位置は0から始まるインデックスで示してください(最初の行は0、最初の列は0)。

自分で試してみよう

    // TODO: 以下にコードを書いてください
    // ラベル付きbreakを使ったネストしたループでターゲットを探してください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

論理とフローのすべてのレッスン

自分で練習してみよう: Goオンラインコンパイラ