Continuare un ciclo specifico
Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 3 di 68.
Proprio come puoi usare le etichette con break per uscire da cicli specifici, Go ti consente anche di usare le etichette con l’istruzione continue. Un continue con etichetta salta l’iterazione corrente del ciclo specificato e passa a quella successiva.
Questo è particolarmente utile nei cicli annidati quando vuoi saltare il resto dell'iterazione corrente di un ciclo esterno dall'interno di un ciclo interno, invece di continuare semplicemente il ciclo interno.
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")
}In questo esempio, quando i == 1 && j == 0, l'istruzione continue outer salta il resto dell'iterazione corrente del ciclo esterno, compreso il ciclo interno e il messaggio "End of outer loop iteration". Il programma passa quindi direttamente all'iterazione successiva del ciclo esterno, in cui i diventa 2.
Sfida
FacileIn questa sfida, farai pratica nell’uso di istruzioni continue con etichetta per controllare l’esecuzione di cicli annidati. Stai creando un sistema di elaborazione dei dati che deve saltare alcune iterazioni del ciclo esterno in base alle condizioni trovate nei cicli interni.
Riceverai due input:
- Una stringa che rappresenta il numero di righe da elaborare (ad es.,
"4") - Una stringa che rappresenta un numero come condizione di salto (ad es.,
"3")
Ti viene fornito il seguente array di dati 2D:
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}
}Il tuo compito è:
- Analizzare il numero di righe dal primo input per determinare quante righe elaborare
- Analizzare il numero come condizione di salto dal secondo input
- Usare cicli annidati con un'istruzione
continuecon etichetta per elaborare i dati - Per ogni riga, controllare il valore di ogni colonna della riga
- Se trovi il numero come condizione di salto in una qualsiasi colonna di una riga, usa
continuecon etichetta per saltare il resto dell'elaborazione di quella riga e passare alla riga successiva - Per le righe che non contengono il numero come condizione di salto, stampa
"Processing row [row_number]: [value1] [value2] [value3] [value4] [value5]" - Per le righe che contengono il numero come condizione di salto, stampa
"Skipping row [row_number] due to condition"
I numeri delle righe devono essere indicati usando un indice a partire da 0 (la prima riga è 0). Elabora solo il numero di righe specificato nel primo input e controlla solo le prime 5 colonne di ogni riga.
Provalo tu
package main
import (
"fmt"
"strconv"
)
func main() {
// Leggi l'input
var rowsInput string
var skipConditionInput string
fmt.Scanln(&rowsInput)
fmt.Scanln(&skipConditionInput)
// Analizza gli input
numRows, _ := strconv.Atoi(rowsInput)
skipCondition, _ := strconv.Atoi(skipConditionInput)
// Array di dati 2D fornito
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: Scrivi il tuo codice qui sotto
// Usa cicli annidati con continue etichettato per elaborare i dati
// Controlla ogni riga per verificare se contiene il numero della condizione di salto
// Stampa i messaggi appropriati in base alla presenza o meno della condizione
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Flusso di controllo avanzato
Switch con `fallthrough`Uscire dai cicli annidatiContinuare un ciclo specificoL'istruzione `goto`Riepilogo - Controllo avanzato dei cicli4Progetto: semplice lista di attività
Configurazione del progettoAggiungere un’attività2Struct e metodi
Definire metodi sugli structReceiver per valoreReceiver con puntatoreScegliere i receiverMetodi vs funzioniRiepilogo - comportamento degli struct5Mappe in dettaglio
Mappe di structPuntatori come valori delle mappeVerificare le mappe nilConfrontare le mappeRiepilogo - Contatore della frequenza delle parole3Interfacce (le basi)
Che cos’è un’interfaccia?Definire un’interfacciaImplementare un’interfacciaUsare i tipi interfacciaInterfaccia vuotaAsserzioni di tipoSwitch di tipoRiepilogo: forme e comportamentiEsercitati da solo: Compilatore Go online