CodeGym /Kursy /C# SELF /Pętla while: wprowadzenie i niuanse użycia

Pętla while: wprowadzenie i niuanse użycia

C# SELF
Poziom 4 , Lekcja 1
Dostępny

1. Wprowadzenie

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

  • Przejść przez wszystkie elementy listy.
  • Wczytywać z klawiatury wartości, dopóki użytkownik nie wpisze właściwej.
  • Policzyć sumę wszystkich liczb od 1 do 100.
  • Pytać użytkownika o hasło tak długo, aż wpisze poprawne.

Jeśli spróbujesz to wszystko zrobić bez pętli, wyjdzie długo, nudno i kompletnie nie do ogarnięcia. Wyobraź sobie, że piszesz kalkulator i postanawiasz ręcznie dodawać liczby od 1 do 10:

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

Znudzisz się, zanim skończysz! Rozwiązanie — pętle. Pozwalają opisać powtarzanie czynności krótko i czytelnie. Dzisiaj poznasz najbardziej podstawową, ale mega przydatną pętlę — while.

2. Poznajemy pętlę while

Składnia i podstawowy schemat

Pętla while to taki "papuga" w świecie programowania: powtarza ten sam fragment kodu, dopóki spełniony jest jakiś warunek. Jak tylko warunek przestaje być prawdziwy, papuga milknie (pętla się kończy).


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

Diagram

Oto prosta blokowa ilustracja, żeby zrozumieć jak działa pętla while:

3. Przykłady: pętla while w akcji

Klasyczny licznik

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

int i = 1;
while (i <= 5)
{
    Console.WriteLine($"Krok nr {i}");
    i++; // Nie zapomnij zwiększyć licznika!
}
// Wypisze:
// 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 skończy (nasza papuga stanie się nieśmiertelna i będzie powtarzać w nieskończoność). To się nazywa nieskończona pętla — straszna sprawa.

Wczytywanie z klawiatury do właściwej wartości

Często pętla służy do tego, żeby "przycisnąć" użytkownika do poprawnej odpowiedzi:

string password = "";
while (password != "qwerty")
{
    Console.Write("Wpisz hasło: ");
    password = Console.ReadLine();
}
Console.WriteLine("Witamy!");

Tu program prosi o hasło, dopóki nie wpiszesz magicznego "qwerty". Uwaga: jeśli usuniesz linię password = Console.ReadLine();, pętla znowu 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 jest od razu fałszywy — ciało pętli nie wykona się ani razu.

Przykład: warunek od razu fałszywy

int i = 10;
while (i < 5)
{
    Console.WriteLine(i); // Nigdy się nie wykona!
}

No i logiczne. Tak właśnie powinno być.

Zagnieżdżone pętle while

Czasem trzeba zrobić pętlę w pętli. Na przykład przejść przez wszystkie linie, a w każdej sprawdzić wszystkie znaki. Na tym etapie to trochę szaleństwo, ale oto prosty przykład:

int i = 1;
while (i <= 3)
{
    int j = 1;
    while (j <= 2)
    {
        Console.WriteLine($"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

O zagnieżdżonych pętlach pogadamy szerzej za parę wykładów, na razie chciałem Cię tylko trochę postraszyć :)

Nieskończona pętla

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

while (true)
{
    Console.WriteLine("Jestem wieczny!");
}

Rzadko używane, zwykle do jakichś procesów w tle (np. serwer), ale też się przydaje.

5. Jak nie pisać głupot: typowe błędy z while

W programowaniu pętla to jak prąd: fajna sprawa, ale trzeba znać zasady bezpieczeństwa.

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

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

int i = 1;
while (i <= 5)
{
    Console.WriteLine(i);
    // i++;  // OJEJ! Zapomnieliśmy zwiększyć i
}

Problem 2: źle ustawiony warunek

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

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

Problem 3: błąd z typami danych

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

int number = 5;
while (number) // Błąd! Oczekiwano bool, a nie int.
{
    number--;
}
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION