Продолжение конкретного цикла
Часть раздела Логика и управление потоком путешествия по 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.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Задание
ЛегкоВ этом испытании вы попрактикуетесь в использовании именованных операторов 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}
}Ваша задача:
- Преобразовать количество строк из первого входного значения, чтобы определить, сколько строк нужно обработать
- Преобразовать число — условие пропуска из второго входного значения
- Использовать вложенные циклы с именованным
continueдля обработки данных - Для каждой строки проверить значение каждого столбца в этой строке
- Если вы найдете число — условие пропуска в любом столбце строки, используйте именованный
continue, чтобы пропустить оставшуюся часть обработки этой строки и перейти к следующей строке - Для строк, которые не содержат число — условие пропуска, выведите
"Processing row [row_number]: [value1] [value2] [value3] [value4] [value5]" - Для строк, которые содержат число — условие пропуска, выведите
"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 для обработки данных
// Проверьте каждую строку на наличие числа условия пропуска
// Выведите соответствующие сообщения в зависимости от того, найдено ли условие
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком выполнения
Switch с использованием `fallthrough`Выход из вложенных цикловПродолжение конкретного циклаОператор `goto`Итоги: Продвинутое управление циклами4Проект: Простой список задач
Настройка проектаДобавление задачи2Структуры и методы
Определение методов для структурПолучатели по значениюПолучатели по указателюВыбор типа получателяМетоды против функцийИтоги: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картИтоги: счетчик частоты слов3Интерфейсы (Основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование интерфейсных типовПустой интерфейсУтверждение типаПереключатель типовИтоги: Фигуры и поведение