Menu
Coddy logo textTech

Sortir de boucles imbriquées

Fait partie de la section Logique & Flux du Journey GO de Coddy — leçon 2 sur 68.

Lorsque vous travaillez avec des boucles imbriquées, une instruction break classique ne quitte que la boucle la plus interne. Cependant, Go propose des étiquettes (labels) qui vous permettent de sortir directement des boucles externes, vous offrant ainsi un contrôle précis sur les structures de boucles complexes.

Une étiquette est un identifiant suivi d'un deux-points que vous placez avant une boucle. Vous pouvez ensuite utiliser break suivi du nom de l'étiquette pour quitter cette boucle spécifique, même depuis l'intérieur de boucles imbriquées.

outer:
for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        if i == 1 && j == 1 {
            break outer
        }
        fmt.Printf("i=%d, j=%d\n", i, j)
    }
}

Dans cet exemple, lorsque la condition i == 1 && j == 1 est remplie, break outer quitte immédiatement les boucles interne et externe. Ceci est particulièrement utile lors de la recherche dans des structures de données en 2D où vous souhaitez arrêter complètement la recherche une fois que vous avez trouvé ce que vous cherchez.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

challenge icon

Défi

Facile

Dans ce défi, vous allez vous entraîner à utiliser des instructions break étiquetées pour quitter des boucles imbriquées lors de la recherche dans une grille 2D. Vous devez trouver un nombre cible spécifique dans la grille et arrêter la recherche immédiatement dès que vous le trouvez.

Vous recevrez deux entrées :

  • Une chaîne représentant les dimensions de la grille au format "rows,cols" (par exemple, "3,4")
  • Une chaîne représentant le nombre cible à rechercher (par exemple, "7")

Vous disposez de la grille 2D de nombres suivante :

grid := [][]int{
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
}

Votre tâche consiste à :

  1. Analyser les dimensions de la première entrée pour déterminer le nombre de lignes et de colonnes à parcourir
  2. Analyser le nombre cible de la deuxième entrée
  3. Utiliser des boucles imbriquées avec un break étiqueté pour effectuer la recherche dans la grille
  4. Lorsque vous trouvez le nombre cible, affichez "Found [target] at position ([row], [col])" et quittez immédiatement les deux boucles en utilisant le break étiqueté
  5. Si vous terminez la recherche sans trouver la cible, affichez "Target [target] not found"

La position doit être indiquée en utilisant une indexation basée sur 0 (la première ligne est 0, la première colonne est 0).

Aide-mémoire

Les étiquettes (labels) vous permettent de sortir de boucles externes à partir de boucles imbriquées. Une étiquette est un identifiant suivi d'un deux-points placé avant une boucle.

outer:
for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        if condition {
            break outer  // sort des deux boucles
        }
    }
}

Utilisez break suivi du nom de l'étiquette pour quitter cette boucle spécifique, même à partir de structures profondément imbriquées. C'est utile lors de la recherche dans des données 2D et que vous souhaitez vous arrêter complètement une fois que vous avez trouvé votre cible.

Essayez vous-même

package main

import (
    "fmt"
    "strconv"
    "strings"
)

func main() {
    // Lire l'entrée
    var dimensions string
    var targetStr string
    fmt.Scanln(&dimensions)
    fmt.Scanln(&targetStr)
    
    // Analyser les dimensions
    dimParts := strings.Split(dimensions, ",")
    rows, _ := strconv.Atoi(dimParts[0])
    cols, _ := strconv.Atoi(dimParts[1])
    
    // Analyser le nombre cible
    target, _ := strconv.Atoi(targetStr)
    
    // Grille prédéfinie
    grid := [][]int{
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12},
    }
    
    // TODO: Écrivez votre code ci-dessous
    // Utilisez des boucles imbriquées avec une rupture étiquetée (labeled break) pour rechercher la cible
    
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux