Fortsetzen einer bestimmten Schleife
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 3 von 68.
Genauso wie Sie Labels mit break verwenden können, um bestimmte Schleifen zu beenden, erlaubt Go Ihnen auch, Labels mit der continue-Anweisung zu verwenden. Ein benanntes continue überspringt die aktuelle Iteration der angegebenen Schleife und springt zu deren nächsten Iteration.
Dies ist besonders nützlich in verschachtelten Schleifen, wenn Sie den Rest der aktuellen Iteration einer äußeren Schleife aus einer inneren Schleife heraus überspringen möchten, anstatt nur die innere Schleife fortzusetzen.
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 diesem Beispiel überspringt die continue outer-Anweisung, wenn i == 1 && j == 0 gilt, den Rest der aktuellen Iteration der äußeren Schleife, einschließlich der inneren Schleife und der Nachricht "End of outer loop iteration". Das Programm fährt dann direkt mit der nächsten Iteration der äußeren Schleife fort, in der i zu 2 wird.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Aufgabe
EinfachIn dieser Herausforderung üben Sie die Verwendung von benannten continue-Anweisungen zur Steuerung der Ausführung verschachtelter Schleifen. Sie bauen ein Datenverarbeitungssystem auf, das bestimmte Iterationen der äußeren Schleife basierend auf Bedingungen in inneren Schleifen überspringen muss.
Sie erhalten zwei Eingaben:
- Einen String, der die Anzahl der zu verarbeitenden Zeilen darstellt (z. B.
"4") - Einen String, der eine Skip-Bedingungszahl darstellt (z. B.
"3")
Ihnen wird das folgende 2D-Datenarray zur Verfügung gestellt:
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}
}Ihre Aufgabe ist es:
- Die Anzahl der Zeilen aus der ersten Eingabe zu parsen, um zu bestimmen, wie viele Zeilen verarbeitet werden sollen
- Die Skip-Bedingungszahl aus der zweiten Eingabe zu parsen
- Verschachtelte Schleifen mit einem benannten
continuezu verwenden, um die Daten zu verarbeiten - Für jede Zeile jeden Spaltenwert in dieser Zeile zu prüfen
- Wenn Sie die Skip-Bedingungszahl in einer Spalte einer Zeile finden, verwenden Sie das benannte
continue, um den Rest der Verarbeitung dieser Zeile zu überspringen und zur nächsten Zeile überzugehen - Für Zeilen, die die Skip-Bedingungszahl nicht enthalten, geben Sie
"Processing row [row_number]: [value1] [value2] [value3] [value4] [value5]"aus - Für Zeilen, die die Skip-Bedingungszahl enthalten, geben Sie
"Skipping row [row_number] due to condition"aus
Die Zeilennummern sollten unter Verwendung einer 0-basierten Indizierung angegeben werden (die erste Zeile ist 0). Verarbeiten Sie nur die in der ersten Eingabe angegebene Anzahl von Zeilen und prüfen Sie nur die ersten 5 Spalten jeder Zeile.
Spickzettel
Verwenden Sie Labels mit continue, um die aktuelle Iteration einer bestimmten Schleife in verschachtelten Schleifen zu überspringen:
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")
}Wenn continue outer ausgeführt wird, überspringt es den Rest der aktuellen Iteration der äußeren Schleife und springt direkt zur nächsten Iteration der markierten Schleife.
Probier es selbst
package main
import (
"fmt"
"strconv"
)
func main() {
// Eingabe lesen
var rowsInput string
var skipConditionInput string
fmt.Scanln(&rowsInput)
fmt.Scanln(&skipConditionInput)
// Eingaben parsen
numRows, _ := strconv.Atoi(rowsInput)
skipCondition, _ := strconv.Atoi(skipConditionInput)
// Bereitgestelltes 2D-Datenarray
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: Schreiben Sie Ihren Code unten
// Verwenden Sie verschachtelte Schleifen mit markiertem continue, um die Daten zu verarbeiten
// Überprüfen Sie jede Zeile auf die Nummer der Skip-Bedingung
// Geben Sie entsprechende Meldungen aus, je nachdem, ob die Bedingung gefunden wurde
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittener Kontrollfluss
Switch mit `fallthrough`Abbrechen von verschachtelten SchleifenFortsetzen einer bestimmten SchleifeDie `goto`-AnweisungZusammenfassung – Fortgeschrittene Schleifensteuerung4Projekt: Einfache Aufgabenliste
Projekt-SetupEine Aufgabe hinzufügen2Structs und Methoden
Methoden für Structs definierenValue ReceiverPointer ReceiverReceiver auswählenMethoden vs. FunktionenZusammenfassung – Struct-Verhalten5Maps im Detail
Maps von StructsPointer als Map-WertePrüfen auf Nil-MapsMaps vergleichenZusammenfassung – Wortfrequenz-Zähler8Projekt: Einfache Bestandsverwaltung
ProjektübersichtLagerbestand prüfen11Abschlussherausforderungen
Einfache KontaktlisteEinfacher Zahlen-ValidatorSammler für eindeutige Elemente3Interfaces (Die Grundlagen)
Was ist ein Interface?Ein Interface definierenEin Interface implementierenInterface-Typen verwendenLeeres InterfaceType AssertionsType SwitchZusammenfassung – Formen und Verhalten