CodeGym /Kursy /JAVA 25 SELF /Pętla while: wprowadzenie i niuanse działania

Pętla while: wprowadzenie i niuanse działania

JAVA 25 SELF
Poziom 4, Lekcja 1
Dostępny

1. Wprowadzenie

W programowaniu często trzeba wykonywać te same czynności wiele razy z rzędu. Na przykład:

  • Przejść po wszystkich elementach listy.
  • Odczytywać z klawiatury wartości, dopóki użytkownik nie wprowadzi właściwej.
  • Obliczyć sumę wszystkich liczb od 1 do 100.
  • Pytać użytkownika o hasło tak długo, aż poda poprawne.

Jeśli spróbujesz zrealizować to wszystko bez pętli, wyjdzie długo, nudno i nieskalowalnie. Wyobraź sobie, że piszesz program kalkulator i decydujesz się dodawać liczby od 1 do 10 ręcznie:

int sum = 0;
sum = sum + 1;
sum = sum + 2;
sum = sum + 3;
// ... i tak 10 razy. Ech.
Ręczne powtarzanie bez pętli — niewygodne!

Znudzisz się, zanim skończysz! Rozwiązanie — pętle. Pozwalają zwięźle i jasno opisać powtarzanie czynności. Dziś poznamy najbardziej podstawową, ale diabelnie przydatną pętlę — while.

2. Poznajemy pętlę while

Składnia i podstawowy schemat

Pętla while to „papuga” w świecie programowania: powtarza ten sam fragment kodu tak długo, jak spełniony jest pewien warunek. Gdy tylko warunek przestaje być prawdziwy, papuga milknie (pętla się kończy).

Składnia:

while (condition)
{
    // Ciało pętli
}
Zapis pętli while z blokiem poleceń

Diagram

Oto prosty schemat blokowy ułatwiający zrozumienie działania pętli while:

uml-while

3. Przykłady: pętla while w działaniu

Klasyczny licznik

Zróbmy prosty program, który liczy od 1 do 5 i wypisuje liczby:

int i = 1;
while (i <= 5)
{
    System.out.println("Krok nr " + i);
    i++; // Nie zapomnij zwiększyć licznika!
}
// Wyświetli:
// Krok nr 1
// Krok nr 2
// Krok nr 3
// Krok nr 4
// Krok nr 5

Zwróć uwagę: jeśli zapomnisz zwiększyć zmienną i, pętla nigdy się nie zakończy (nasza papuga stanie się nieśmiertelna i wiecznym powtarzaczem). To się nazywa nieskończona pętla — rzecz dość groźna.

Wczytywanie z klawiatury aż do uzyskania poprawnej wartości

Często pętla służy do „dociskania” użytkownika do poprawnej odpowiedzi:

String password = "";
while (!password.equals("qwerty"))
{
    System.out.print("Podaj hasło: ");
    password = console.nextLine();
}
System.out.println("Witamy!");

Tutaj program prosi o podanie hasła, dopóki nie wpiszesz magicznego "qwerty". Nie zapomnij: jeśli usuniesz linię password = console.nextLine();, pętla znów stanie się nieskończona (będzie pytać o hasło, ale nie będzie czytać wejścia — zawiesi się na zawsze, jak zepsuty robot).

4. Rodzaje i scenariusze użycia pętli while

Zwykła pętla while

Ta pętla, jak pokazano wyżej, sprawdza warunek przed pierwszą iteracją. Jeśli warunek od razu jest fałszywy — ciało pętli nie wykona się ani razu.

Przykład: warunek nie jest spełniony od razu

int i = 10;
while (i < 5)
{
    System.out.println(i); // Nie wykona się nigdy!
}

Co, swoją drogą, jest logiczne. Dokładnie tak, jak tu napisano.

Zagnieżdżone pętle while

Czasem trzeba zrobić pętlę w pętli. Na przykład przejść po wszystkich wierszach i w każdym z nich sprawdzić wszystkie znaki. Na tym etapie to raczej przygoda, ale oto prosty przykład:

int i = 1;
while (i <= 3)
{
    int j = 1;
    while (j <= 2)
    {
        System.out.println("i = " + i + ", j = " + j);
        j++;
    }
    i++;
}

// i = 1, j = 1
// i = 1, j = 2
// i = 2, j = 1
// i = 2, j = 2
// i = 3, j = 1
// i = 3, j = 2

Szczegółowo omówimy zagnieżdżone pętle za kilka lekcji, na razie tylko chciałem was postraszyć :)

Nieskończona pętla

The while loop in real life: While Barney is in the bar — Moe throws him out. But Barney always returns... The condition never changes = infinite loop!

Czasem pętle się kończą, a czasem — żyją wiecznie.

while (true)
{
    System.out.println("Jestem wieczny!");
}

Używana rzadko, zwykle do jakichś procesów w tle (na przykład praca serwera), ale też stosowana w praktyce.

5. Jak nie robić głupot: częste błędy z while

W programowaniu pętla jest jak elektryczność: świetna sprawa, ale trzeba znać zasady bezpieczeństwa.

Problem 1: nieskończona pętla przez nieuwagę

Bardzo często początkujący zapominają aktualizować zmienną, od której zależy warunek. W efekcie pętla działa „w nieskończoność” i trzeba zatrzymać program ręcznie (na przykład kombinacją Ctrl + C).

int i = 1;
while (i <= 5)
{
    System.out.println(i);
    // i++;  // Ojej! Zapomnieliśmy zwiększyć i
}

Problem 2: błędnie ustawiony warunek

Czasem programista sam sobie kopie dołek: warunek nigdy nie bywa prawdziwy. W efekcie pętla nie wykonuje się w ogóle.

int i = 10;
while (i < 5)
{
    System.out.println(i); // Ten kod nigdy się nie wykona.
    i++;
}

Problem 3: błąd typów danych

W warunku pętli zawsze musi być wyrażenie boolowskie — czyli wynik obliczeń powinien być true lub false.

int number = 5;
while (number) // Błąd! Oczekiwano boolean, a nie int.
{
    number--;
}
1
Zadanie
JAVA 25 SELF, poziom 4, lekcja 1
Niedostępne
Odliczanie przed startem 🚀
Odliczanie przed startem 🚀
1
Zadanie
JAVA 25 SELF, poziom 4, lekcja 1
Niedostępne
Odblokowanie smartfona 📱
Odblokowanie smartfona 📱
1
Zadanie
JAVA 25 SELF, poziom 4, lekcja 1
Niedostępne
Wyświetlanie miejsc w kinie 🎞️
Wyświetlanie miejsc w kinie 🎞️
1
Zadanie
JAVA 25 SELF, poziom 4, lekcja 1
Niedostępne
Ewidencja wydatków na kawę ☕
Ewidencja wydatków na kawę ☕
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION