Menu
Coddy logo textTech

特定のループの Continue

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

break とラベルを使用して特定のループを抜けられるのと同様に、Go では continue 文とラベルを使用することもできます。ラベル付きの continue は、指定したループの現在の反復をスキップし、次の反復へ移動します。

これは、nested loops で、単に内側の loop を続行するのではなく、内側の loop から outer loop の現在の iteration の残りを skip したい場合に特に役立ちます。

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 文によって outer loop の現在の iteration の残りの部分(inner loop と「End of outer loop iteration」メッセージを含む)がスキップされます。その後、プログラムは outer loop の次の iteration に直接進み、i は 2 になります。

challenge icon

チャレンジ

簡単

このチャレンジでは、ラベル付きcontinue文を使用して、nested loopの実行を制御する練習をします。内側のloopで見つかった条件に基づいて、特定の外側のloopの反復をスキップする必要があるdata Processingシステムを構築します。

次の2つのinputsを受け取ります。

  • 処理するrowの数を表すstring(例:"4"
  • skip condition numberを表すstring(例:"3"

次の2D data arrayがProvidedされています。

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. 最初のinputからnumber of rowsをParseし、processするrowの数を決定する
  2. 2番目のinputからskip condition numberをParseする
  3. ラベル付きcontinueを使用したnested loopsでdataをprocessする
  4. each rowについて、そのrowの各列の値をCheckする
  5. rowのいずれかの列でskip condition numberがfoundした場合、ラベル付きcontinueを使用してそのrowの残りのProcessingをskipし、次のrowに移動する
  6. skip condition numberを含まないrowについては、"Processing row [row_number]: [value1] [value2] [value3] [value4] [value5]"をPrintする
  7. skip condition numberを含むrowについては、"Skipping row [row_number] due to condition"をPrintする

row numberは0-based indexing(最初のrowは0)を使用して報告してください。最初のinputで指定されたnumber of rowsのみをprocessし、各rowの最初の5列のみをCheckしてください。

自分で試してみよう

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)
    
    // 提供された2Dデータ配列
    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腕試し

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

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

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