Fortsetzen einer bestimmten Schleife
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy. Lektion 3 von 68.
Genauso wie du Labels mit break verwenden kannst, um bestimmte Schleifen zu verlassen, erlaubt Go dir auch, Labels mit der Anweisung continue zu verwenden. Ein mit einem Label versehenes continue überspringt die aktuelle Iteration der angegebenen Schleife und springt zu ihrer nächsten Iteration.
Dies ist besonders bei verschachtelten Schleifen nützlich, wenn du innerhalb einer inneren Schleife den Rest der aktuellen Iteration einer äußeren Schleife überspringen möchtest, anstatt lediglich 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 Anweisung continue outer, wenn i == 1 && j == 0, den Rest der aktuellen Iteration der äußeren Schleife, einschließlich der inneren Schleife und der Meldung „End of outer loop iteration“. Das Programm fährt dann direkt mit der nächsten Iteration der äußeren Schleife fort, in der i den Wert 2 annimmt.
Aufgabe
EinfachIn dieser Herausforderung übst du die Verwendung von markierten continue-Anweisungen, um die Ausführung verschachtelter Schleifen zu steuern. Du erstellst ein Datenverarbeitungssystem, das bestimmte Iterationen der äußeren Schleife überspringen muss, basierend auf Bedingungen, die in inneren Schleifen gefunden werden.
Du erhältst zwei Eingaben:
- Eine Zeichenkette, die die Anzahl der zu verarbeitenden Zeilen darstellt (z. B.
"4") - Eine Zeichenkette, die eine Zahl für die Überspringbedingung darstellt (z. B.
"3")
Das folgende 2D-Datenarray wird bereitgestellt:
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}
}Deine Aufgabe ist es:
- Die Anzahl der Zeilen aus der ersten Eingabe zu parsen, um zu bestimmen, wie viele Zeilen verarbeitet werden sollen
- Die Zahl für die Überspringbedingung aus der zweiten Eingabe zu parsen
- Verschachtelte Schleifen mit einem markierten
continuezu verwenden, um die Daten zu verarbeiten - Für jede Zeile jeden Spaltenwert in dieser Zeile zu überprüfen
- Wenn du die Zahl für die Überspringbedingung in einer beliebigen Spalte einer Zeile findest, ein markiertes
continuezu verwenden, um den Rest der Verarbeitung dieser Zeile zu überspringen und zur nächsten Zeile zu wechseln - Für Zeilen, die die Zahl für die Überspringbedingung nicht enthalten,
"Processing row [row_number]: [value1] [value2] [value3] [value4] [value5]"auszugeben - Für Zeilen, die die Zahl für die Überspringbedingung enthalten,
"Skipping row [row_number] due to condition"auszugeben
Die Zeilennummern sollten mit einer 0-basierten Indizierung angegeben werden (die erste Zeile ist 0). Verarbeite nur die in der ersten Eingabe angegebene Anzahl an Zeilen und überprüfe nur die ersten 5 Spalten jeder Zeile.
ERFORDERLICHES AUSGABEFORMAT:
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: Schreibe deinen Code darunter
// Verwende verschachtelte Schleifen mit labeled continue, um die Daten zu verarbeiten
// Prüfe jede Zeile auf die Skip-Condition-Nummer
// Gib 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Übe selbstständig: Online-Go-Compiler