while, do-while, break / continue

Nie zawsze z góry wiadomo, ile razy coś trzeba powtórzyć. Pętle while i do-while działają „dopóki warunek jest prawdziwy”. Poznasz też break (przerwij pętlę), continue (pomiń obrót) oraz krótkie wprowadzenie do etykiet.

while do-while break continue · etykiety
1

Pętla while

while powtarza blok kodu dopóki warunek jest prawdziwy. Warunek sprawdzany jest przed każdym obrotem – jeśli od początku jest fałszywy, pętla nie wykona się ani razu.

Liczenie do 5
var i = 1

while (i <= 5) {
    println(i)
    i++          // KLUCZOWE: zbliżamy się do końca warunku
}
Warunek musi kiedyś przestać być prawdziwy

Wewnątrz pętli while musi dziać się coś, co w końcu uczyni warunek fałszywym (tu: i++). Bez tego pętla kręci się w nieskończoność, a program się „zawiesza”.

Gdy z góry wiesz, po czym przechodzisz (np. po zakresie), wygodniejsze bywa for z poprzedniej lekcji. while błyszczy tam, gdzie liczba powtórzeń nie jest znana z góry – np. „czytaj dane, dopóki użytkownik nie wpisze 0”.

2

Pętla do-while

W do-while warunek sprawdzany jest na końcu, po wykonaniu bloku. Dzięki temu blok wykona się co najmniej raz, nawet jeśli warunek od początku jest fałszywy.

Najpierw działaj, potem sprawdź
var liczba = 0

do {
    println("Obrót numer $liczba")
    liczba++
} while (liczba < 3)
PętlaKiedy sprawdza warunekMinimalna liczba wykonań
whileprzed obrotem0 (może nie wykonać się wcale)
do-whilepo obrocie1 (zawsze co najmniej raz)
do-while pasuje do menu

Gdy chcesz najpierw coś pokazać (np. menu wyboru), a dopiero potem zdecydować, czy powtarzać – wybierz do-while. Menu zawsze wyświetli się przynajmniej raz.

3

break – przerwij pętlę

Słowo break natychmiast kończy pętlę i przechodzi do kodu po niej – nawet jeśli warunek wciąż byłby prawdziwy. Działa w każdej pętli (while, do-while, for).

Zatrzymanie na warunku
for (i in 1..100) {
    if (i * i > 50) {
        println("Pierwsza liczba z kwadratem > 50: $i")
        break          // kończymy pętlę – reszta nie jest sprawdzana
    }
}
// Pierwsza liczba z kwadratem > 50: 8
4

continue – pomiń obrót

continue pomija resztę bieżącego obrotu i przechodzi do następnego. Pętla nie kończy się – po prostu „przeskakujemy” jeden przebieg.

Tylko liczby nieparzyste
for (i in 1..10) {
    if (i % 2 == 0) {
        continue       // pomiń liczby parzyste
    }
    print("$i ")        // 1 3 5 7 9
}
break kończy, continue pomija

Łatwo je pomylić: break wychodzi z pętli na dobre, a continue tylko opuszcza jeden obrót i leci dalej.

5

Pętla „do skutku”: while(true) + break

Czasem chcemy powtarzać coś, aż spełni się jakiś warunek w środku pętli. Stosujemy wtedy pętlę celowo nieskończoną while (true), z której wychodzimy przez break.

Pytaj o hasło, aż będzie poprawne
while (true) {
    print("Podaj hasło: ")
    val haslo = readln()

    if (haslo == "kotlin") {
        println("Dostęp przyznany")
        break                      // jedyne wyjście z pętli
    }
    println("Błędne hasło, spróbuj ponownie")
}
Nieskończona pętla MUSI mieć wyjście

while (true) nigdy nie zakończy się sama – wewnątrz musi być break (albo return), inaczej program zawiesi się na zawsze.

6

Etykiety (krótkie wprowadzenie)

W pętlach zagnieżdżonych break przerywa tylko pętlę wewnętrzną. Jeśli chcesz wyjść od razu z pętli zewnętrznej, nadaj jej etykietę – nazwę zakończoną znakiem @ – i wskaż ją: break@nazwa.

Wyjście z dwóch pętli naraz
petla@ for (i in 1..3) {
    for (j in 1..3) {
        if (i * j == 4) {
            println("Stop przy $i * $j")
            break@petla            // wychodzi z OBU pętli
        }
        println("$i * $j = ${i * j}")
    }
}
Stosuj z umiarem

Etykiety działają też z continue@nazwa. Bywają przydatne, ale potrafią utrudnić czytanie kodu – sięgaj po nie tylko wtedy, gdy naprawdę musisz wyjść z zewnętrznej pętli. Często da się to rozwiązać prościej.

7

Częste błędy

❌ Błąd 1: brak zmiany warunku → pętla nieskończona

❌ i nigdy nie rośnie

var i = 1
while (i <= 5) {
    println(i)
    // brak i++ !
}
// pętla kręci się
// w nieskończoność

✅ Zbliżamy się do końca

var i = 1
while (i <= 5) {
    println(i)
    i++
}

❌ Błąd 2: średnik zaraz po while

❌ ; tworzy pustą pętlę

var i = 1
while (i <= 5);
{
    println(i)
    i++
}
// pusta pętla zawiesza
// program (i się nie zmienia)

✅ Bez średnika

var i = 1
while (i <= 5) {
    println(i)
    i++
}

❌ Błąd 3: pomylenie break z continue

❌ break ucina za wcześnie

for (i in 1..5) {
    if (i == 3) break
    println(i)
}
// 1 2  – pętla się kończy!

✅ continue tylko pomija

for (i in 1..5) {
    if (i == 3) continue
    println(i)
}
// 1 2 4 5

❌ Błąd 4: break w pętli zagnieżdżonej

❌ break wychodzi tylko z wewnętrznej

for (i in 1..3) {
    for (j in 1..3) {
        if (warunek) break
        // przerywa TYLKO
        // pętlę po j
    }
}

✅ Etykieta dla pętli zewnętrznej

petla@ for (i in 1..3) {
    for (j in 1..3) {
        if (warunek) break@petla
        // wychodzi z obu
    }
}
8

Podsumowanie

  • while (warunek) { ... } – powtarza, dopóki warunek prawdziwy; sprawdza go przed obrotem (może nie wykonać się wcale).
  • do { ... } while (warunek) – sprawdza warunek po obrocie; wykona się co najmniej raz.
  • W while musi dziać się coś, co w końcu zakończy warunek – inaczej pętla nieskończona.
  • break – natychmiast kończy pętlę; continuepomija bieżący obrót.
  • while (true) + break to wzorzec „powtarzaj do skutku”.
  • W pętlach zagnieżdżonych break/continue dotyczą pętli wewnętrznej; etykieta (nazwa@) pozwala wskazać zewnętrzną.
9

Zadania do wykonania

Zadania z wczytywaniem uruchamiaj w IntelliJ IDEA; pozostałe w Kotlin Playground.

Zadanie 1 łatwe

Za pomocą pętli while (z licznikiem var i) wypisz liczby od 1 do 10. Pamiętaj o zwiększaniu licznika.

Zadanie 2 łatwe

Napisz pętlę for po liczbach 1–30, która wypisuje tylko liczby niepodzielne przez 3 (użyj continue), a po dojściu do 20 przerywa się (break).

Zadanie 3 łatwe

Korzystając z while (true) i break, wczytuj liczby od użytkownika i sumuj je, aż wpisze 0. Na koniec wypisz sumę.

Zadanie 4 średnie

Napisz proste menu w pętli do-while: wyświetl opcje (1 – przywitaj, 2 – pożegnaj, 0 – wyjście), wczytaj wybór i obsłuż go instrukcją when. Pętla ma się powtarzać, dopóki użytkownik nie wybierze 0.