Menu
Coddy logo textTech

Uscire dai cicli annidati

Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 2 di 68.

Quando lavori con cicli annidati, una normale istruzione break esce solo dal ciclo più interno. Tuttavia, Go fornisce etichette che ti permettono di uscire direttamente dai cicli esterni, offrendoti un controllo preciso sulle strutture di cicli complesse.

Un'etichetta è un identificatore seguito da due punti che si inserisce prima di un ciclo. Puoi quindi usare break seguito dal nome dell'etichetta per uscire da quel ciclo specifico, anche dall'interno di cicli annidati.

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)
    }
}

In questo esempio, quando la condizione i == 1 && j == 1 è soddisfatta, break outer esce immediatamente sia dal ciclo interno che da quello esterno. Questo è particolarmente utile quando si esegue una ricerca in strutture di dati 2D e si vuole interromperla del tutto non appena si trova ciò che si sta cercando.

challenge icon

Sfida

Facile

In questa sfida, ti eserciterai a usare istruzioni break con etichetta per uscire dai cicli annidati durante la ricerca in una griglia 2D. Devi trovare un numero specifico nella griglia e interrompere immediatamente la ricerca quando lo trovi.

Riceverai due input:

  • Una stringa che rappresenta le dimensioni della griglia nel formato "rows,cols" (ad es., "3,4")
  • Una stringa che rappresenta il numero da cercare (ad es., "7")

Ti viene fornita la seguente griglia 2D di numeri:

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

Il tuo compito è:

  1. Analizzare le dimensioni del primo input per determinare quante righe e colonne esaminare
  2. Analizzare il numero obiettivo del secondo input
  3. Usare cicli annidati con un break con etichetta per esaminare la griglia
  4. Quando trovi il numero obiettivo, stampare "Found [target] at position ([row], [col])" e uscire immediatamente da entrambi i cicli usando il break con etichetta
  5. Se completi la ricerca senza trovare il numero obiettivo, stampare "Target [target] not found"

La posizione deve essere indicata usando l'indicizzazione a partire da 0 (la prima riga è 0, la prima colonna è 0).

Provalo tu

package main

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

func main() {
    // Leggi l'input
    var dimensions string
    var targetStr string
    fmt.Scanln(&dimensions)
    fmt.Scanln(&targetStr)
    
    // Analizza le dimensioni
    dimParts := strings.Split(dimensions, ",")
    rows, _ := strconv.Atoi(dimParts[0])
    cols, _ := strconv.Atoi(dimParts[1])
    
    // Analizza il numero da cercare
    target, _ := strconv.Atoi(targetStr)
    
    // Griglia predefinita
    grid := [][]int{
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12},
    }
    
    // TODO: Scrivi il tuo codice qui sotto
    // Usa cicli annidati con un break etichettato per cercare il numero
    
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Go online