continue z etykietą
Kontynuowanie zewnętrznej pętli
continue z etykietą to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Java Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Java Academy zawiera 4 lekcji w sumie.
Przechodzenie do kolejnego obiegu pętli zewnętrznej
Zwykłe continue rozpoczyna ponownie tylko pętlę wewnętrzną. Czasami trzeba jednak przejść do następnego obiegu pętli zewnętrznej.
Java udostępnia do tego continue z etykietą.
Łączy ono etykietę pętli ze słowem kluczowym continue, aby określić, która pętla ma przejść dalej.
Składnia continue z etykietą
Postać tej instrukcji to continue label;, gdzie etykieta oznacza otaczającą pętlę.
Zamiast przechodzić do kolejnego obiegu pętli wewnętrznej, instrukcja przechodzi do następnej iteracji pętli oznaczonej etykietą.
Wszystko, co pozostało do wykonania w pętli wewnętrznej w tym obiegu, zostaje pominięte.
continue outer; // jump to next iteration of 'outer'Pierwszy przykład
W tym przykładzie, gdy col jest równe 2, wykonywane jest continue zewnętrznej pętli.
Pomija to pozostałą część pętli wewnętrznej i od razu przechodzi do następnego wiersza.
public class Main {
public static void main(String[] args) {
outer:
for (int row = 1; row <= 3; row++) {
for (int col = 1; col <= 3; col++) {
if (col == 2) {
continue outer;
}
System.out.println("row " + row + ", col " + col);
}
}
}
}Analiza wyniku
W każdym wierszu wypisano tylko col 1. Gdy col osiągnęło wartość 2, continue outer od razu przeszło do następnego wiersza.
Kolumny 2 i 3 nie zostały wypisane dla żadnego wiersza.
W każdym nowym wierszu pętla wewnętrzna rozpoczynała działanie ponownie od col 1.
continue a continue z etykietą
Dla porównania użyjmy zwykłego continue. Pominęłoby ono tylko col 2, a col 3 nadal zostałoby wypisane.
Po uruchomieniu tego przykładu można zauważyć, że w każdym wierszu pojawiają się zarówno col 1, jak i col 3.
public class Main {
public static void main(String[] args) {
for (int row = 1; row <= 3; row++) {
for (int col = 1; col <= 3; col++) {
if (col == 2) {
continue;
}
System.out.println("row " + row + ", col " + col);
}
}
}
}Najważniejsza różnica
Zwykłe continue pomija tylko bieżący obieg pętli wewnętrznej, więc ta pętla działa dalej.
continue outer z etykietą pomija całą pętlę wewnętrzną i rozpoczyna następny obieg pętli zewnętrznej.
Ta pojedyncza etykieta zmienia zakres pomijanego kodu.
Pomijanie całego wiersza
Continue z etykietą jest przydatne, gdy jedna nieprawidłowa wartość powinna unieważnić resztę obiegu pętli wewnętrznej.
W tym przykładzie, jeśli dowolna liczba w wierszu jest ujemna, pomijane są pozostałe działania dla tego wiersza i wykonywanie przechodzi dalej.
public class Main {
public static void main(String[] args) {
int[][] data = {{1, 2, 3}, {4, -1, 6}, {7, 8, 9}};
rows:
for (int r = 0; r < data.length; r++) {
int sum = 0;
for (int c = 0; c < data[r].length; c++) {
if (data[r][c] < 0) {
System.out.println("Row " + r + " skipped");
continue rows;
}
sum += data[r][c];
}
System.out.println("Row " + r + " sum = " + sum);
}
}
}Analiza tego przykładu
Wiersze 0 i 2 wypisały swoje sumy. Wiersz 1 napotkał wartość ujemną, wypisał "Row 1 skipped" i przeszedł do następnego wiersza.
Co ważne, wiersz z sumą dla wiersza 1 nigdy nie został wykonany, ponieważ continue z etykietą przeskoczyło nad nim.
Filtrowanie par
Innym zastosowaniem jest pominięcie całego elementu zewnętrznego natychmiast po niepowodzeniu jednego z warunków wewnętrznych.
Ta pętla wypisuje pary, ale pomija każde i, którego iloczyn z j przekroczyłby 6.
public class Main {
public static void main(String[] args) {
loopI:
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i * j > 6) {
continue loopI;
}
System.out.println(i + " x " + j + " = " + (i * j));
}
}
}
}Nazwy i umiejscowienie etykiet
Pętla oznaczona etykietą musi obejmować instrukcję continue. Nie można wykonać continue do etykiety, która znajduje się wyżej w kodzie niż ta instrukcja.
Należy wybierać opisowe nazwy, takie jak rows lub loopI, aby czytelnicy wiedzieli, która pętla przechodzi dalej.
Jasna etykieta sama w sobie jest dokumentacją.
Kiedy pomaga, a kiedy przeszkadza
Continue z etykietą pomaga, gdy warunek powinien unieważnić resztę obiegu pętli wewnętrznej i pozwolić przejść dalej.
Nadużywanie etykiet utrudnia jednak prześledzenie przebiegu programu. Jeśli zwykłe continue albo wcześniejsze zakończenie metody przez return jest czytelniejsze, należy wybrać właśnie to rozwiązanie.
Etykiet należy używać tylko wtedy, gdy rzeczywiście zwiększają czytelność.
Szybkie sprawdzenie
Przewidźmy działanie continue z etykietą.
Podsumowanie
continue label; pomija pozostałą część pętli wewnętrznej i przechodzi do następnej iteracji nazwanej pętli zewnętrznej.
Różni się od zwykłego continue, które pomija tylko jeden obieg pętli wewnętrznej. Etykiet należy używać wtedy, gdy zwiększają czytelność logiki obejmującej wiele pętli, a nie tylko skracają kod.
Często zadawane pytania
Czy lekcja „continue z etykietą” jest bezpłatna?
Tak — pełny tekst „continue z etykietą” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Java Academy, przejdź na CoddyKit PRO. Kurs Java Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „continue z etykietą”?
Kontynuowanie zewnętrznej pętli Ćwiczysz Java Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Java Academy?
Nie wymagamy żadnego doświadczenia. Java Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „continue z etykietą”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Java Academy?
Tak. Każda lekcja Java Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- break i continue
- break z etykietą
- continue z etykietą
- Unikanie spaghetti w przepływie sterowania