JavaRush /Курси /C# SELF /Цикл while: знайомство та нюанси роботи

Цикл while: знайомство та нюанси роботи

C# SELF
Рівень 4 , Лекція 1
Відкрита

1. Вступ

У програмуванні часто доводиться багаторазово повторювати ті самі дії. Наприклад:

  • Пройтися по всіх елементах списку.
  • Зчитувати з клавіатури значення, поки користувач не введе потрібне.
  • Підрахувати суму всіх чисел від 1 до 100.
  • Запитувати в користувача пароль доти, поки він не буде правильним.

Якщо спробувати все це реалізувати без циклів, вийде довго, нудно й зовсім немасштабовано. Уявіть, що ви пишете програму-калькулятор і вирішуєте додати числа від 1 до 10 вручну:

int sum = 0;
sum += 1;
sum += 2;
sum += 3;
// ... і так 10 разів.
Ручне повторення без циклу — незручно!

Ви знудитеся раніше, ніж закінчите. Рішення — цикли. Вони дають змогу описати повторення дій лаконічно й зрозуміло. Сьогодні ми познайомимося з одним із найпростіших, але надзвичайно корисних циклів — while.

2. Знайомство з циклом while

Синтаксис і базова схема

Цикл while — це «папуга» у світі програмування: він повторює один і той самий фрагмент коду доти, поки виконується певна умова. Як тільки умова стає хибною, цикл завершується.


while (умова)
{
    // Тіло циклу
}
Запис циклу while з блоком команд

Діаграма

Ось проста блок-схема для розуміння роботи циклу while:

uml-while

3. Приклади: цикл while у дії

Класичний лічильник

Зробімо просту програму, яка відлічує від 1 до 5 та виводить числа:

int i = 1;
while (i <= 5)
{
    Console.WriteLine($"Крок № {i}");
    i++; // Не забудьте збільшити лічильник!
}
// Виведе:
// Крок № 1
// Крок № 2
// Крок № 3
// Крок № 4
// Крок № 5

Зверніть увагу: якщо забути збільшити змінну i, цикл ніколи не завершиться (наш «папуга» стане безсмертним і повторюватиме без кінця). Це називається нескінченний цикл — небезпечна річ.

Введення з клавіатури до потрібного значення

Часто цикл використовують, щоб отримати правильну відповідь від користувача:

string password = "";
while (password != "qwerty")
{
    Console.Write("Введіть пароль: ");
    password = Console.ReadLine();
}
Console.WriteLine("Ласкаво просимо!");

Тут програма просить увести пароль, доки ви не наберете чарівне "qwerty". Не забувайте: якщо видалити рядок password = Console.ReadLine();, цикл знову стане нескінченним (програма запитуватиме пароль, але не читатиме введення — зависне назавжди, як зламаний робот).

4. Види та сценарії використання циклу while

Звичайний цикл while

Цей цикл, як було показано вище, перевіряє умову до першої ітерації. Якщо умова хибна одразу — тіло циклу не виконається жодного разу.

Приклад: умова не виконується одразу

int i = 10;
while (i < 5)
{
    Console.WriteLine(i); // Не виконається ніколи!
}

Це цілком логічно — саме так і має бути.

Вкладені цикли while

Іноді потрібно зробити цикл усередині циклу. Наприклад, перебрати всі рядки, а в кожному — перевірити всі символи. На цьому етапі це радше авантюра, але ось простий приклад:

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

Докладніше розглянемо вкладені цикли за кілька лекцій.

Нескінченний цикл

Іноді цикли завершуються, а іноді — живуть вічно.

while (true)
{
    Console.WriteLine("Я вічний!");
}

Використовують рідко — зазвичай для фонових процесів (наприклад, у роботі сервера), але таке трапляється на практиці.

5. Як не припускатися помилок: часті хиби з while

У програмуванні цикл — як електрика: потужний інструмент, але слід дотримуватися правил безпеки.

Проблема 1: нескінченний цикл через неуважність

Дуже часто новачки забувають оновлювати змінну, від якої залежить умова. У результаті цикл працює без кінця, і доводиться зупиняти програму примусово (наприклад, комбінацією Ctrl + C).

int i = 1;
while (i <= 5)
{
    Console.WriteLine(i);
    // i++;  // Ой! Забули збільшити i
}

Проблема 2: неправильно задана умова

Іноді розробник помиляється у формулюванні умови: вона ніколи не є істинною. У результаті цикл не виконується взагалі.

int i = 10;
while (i < 5)
{
    Console.WriteLine(i); // Цей код ніколи не спрацює.
    i++;
}

Проблема 3: помилка з типами даних

В умові циклу завжди має бути булевий вираз — тобто результат обчислень має бути true або false.

int number = 5;
while (number) // Помилка! Очікувався bool, а не int.
{
    number--;
}
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ