Menu
Coddy logo textTech

特定のループの Continue

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

break を使用して特定のループを終了させるためにラベルを使用できるのと同様に、Go では continue ステートメントでもラベルを使用することができます。ラベル付きの continue は、指定されたループの現在の反復をスキップし、その次の反復へとジャンプします。

これは、単に内側のループを継続するのではなく、内側のループ内から外側のループの現在の反復の残りをスキップしたい場合に、入れ子になったループにおいて特に便利です。

outer:
for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        if i == 1 && j == 0 {
            continue outer
        }
        fmt.Printf("i=%d, j=%d\n", i, j)
    }
    fmt.Println("End of outer loop iteration")
}

この例では、i == 1 && j == 0 のとき、continue outer ステートメントは、内側のループや "End of outer loop iteration" メッセージを含む、外側のループの現在の反復の残りの部分をスキップします。その後、プログラムは外側のループの次の反復に直接移動し、そこで i は 2 になります。

quiz icon腕試し

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

quiz icon腕試し

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

quiz icon腕試し

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

challenge icon

チャレンジ

簡単

このチャレンジでは、ラベル付きの continue ステートメントを使用して、ネストされたループの実行を制御する練習をします。内部ループで見つかった条件に基づいて、外部ループの特定の反復をスキップする必要があるデータ処理システムを構築します。

2つの入力を受け取ります:

  • 処理する行数を表す文字列(例:"4"
  • スキップ条件となる数値を表す文字列(例:"3"

以下の2次元データ配列が提供されています:

data := [][]int{
    {1, 2, 3, 4, 5},
    {6, 7, 8, 9, 10},
    {11, 12, 13, 14, 15},
    {16, 17, 18, 19, 20},
    {21, 22, 23, 24, 25}
}

あなたのタスクは以下の通りです:

  1. 最初の入力から行数を解析し、処理する行数を決定します
  2. 2番目の入力からスキップ条件となる数値を解析します
  3. ラベル付き continue を使用したネストされたループでデータを処理します
  4. 各行について、その行の各列の値をチェックします
  5. 行のいずれかの列にスキップ条件の数値が見つかった場合は、ラベル付き continue を使用してその行の残りの処理をスキップし、次の行に移動します
  6. スキップ条件の数値を含まない行については、"Processing row [row_number]: [value1] [value2] [value3] [value4] [value5]" と出力します
  7. スキップ条件の数値を含む行については、"Skipping row [row_number] due to condition" と出力します

行番号は0ベースのインデックス(最初の行は0)を使用して報告してください。最初の入力で指定された行数のみを処理し、各行の最初の5列のみをチェックしてください。

チートシート

ネストされたループにおいて、continue とラベルを使用して、特定のループの現在の反復をスキップします:

outer:
for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        if i == 1 && j == 0 {
            continue outer
        }
        fmt.Printf("i=%d, j=%d\n", i, j)
    }
    fmt.Println("End of outer loop iteration")
}

continue outer が実行されると、外側のループの現在の反復の残りの処理をスキップし、ラベル付けされたループの次の反復へ直接ジャンプします。

自分で試してみよう

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // 入力を読み込む
    var rowsInput string
    var skipConditionInput string
    fmt.Scanln(&rowsInput)
    fmt.Scanln(&skipConditionInput)
    
    // 入力をパースする
    numRows, _ := strconv.Atoi(rowsInput)
    skipCondition, _ := strconv.Atoi(skipConditionInput)
    
    // 提供された2次元データ配列
    data := [][]int{
        {1, 2, 3, 4, 5},
        {6, 7, 8, 9, 10},
        {11, 12, 13, 14, 15},
        {16, 17, 18, 19, 20},
        {21, 22, 23, 24, 25},
    }
    
    // TODO: 以下にコードを記述してください
    // ラベル付きcontinueを使用した入れ子のループでデータを処理します
    // 各行にスキップ条件の数値が含まれているか確認します
    // 条件が見つかったかどうかに基づいて、適切なメッセージを出力します
    
}
quiz icon腕試し

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

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