Menu
CoddyTech

继续指定的循环

本课属于 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 语句会跳过外层循环当前迭代的剩余部分,包括内层循环和“外层循环迭代结束”这条消息。然后,程序会直接进入外层循环的下一次迭代,此时 i 变为 2。

challenge icon

挑战

简单

在这个挑战中,你将练习使用带标签的 continue 语句来控制嵌套循环的执行。你正在构建一个数据处理系统,需要根据内层循环中找到的条件,跳过某些外层循环迭代。

你将收到两个输入:

  • 一个表示要处理的行数的字符串(例如,"4")
  • 一个表示跳过条件数字的字符串(例如,"3")

系统会提供以下二维数据数组:

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. 从第二个输入中解析跳过条件数字
  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 列。

亲手试试

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)
    
    // 已提供的二维数据数组
    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 在线编译器