Menu
Coddy logo textTech

Продолжение конкретного цикла

Часть раздела Логика и управление потоком путешествия по GO на Coddy — урок 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 для управления выполнением вложенных циклов. Вы создаете систему обработки данных, которой необходимо пропускать определенные итерации внешнего цикла на основе условий, найденных во внутренних циклах.

Вы получите два входных значения:

  • Строка, представляющая количество строк для обработки (например, "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). Обрабатывайте только то количество строк, которое указано в первом входном значении, и проверяйте только первые 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)
    
    // Предоставленный двумерный массив данных
    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Проверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком