Цикли

У житті циклами називають якісь події, які постійно повторюються через певний проміжок часу. У Java ж циклами називають код, який може виконатись 0 або більше разів (тобто деякі цикли навіть ніколи не виконуються). На попередній сторінці були розглянуті інструкції if та switch, а тут Ви дізнаєтесь ще про for, while, do. Сам процес повторення частини програми називається ітерацією, а значення, яке змінюється при кожній ітерації (часто це “лічильник”) — ітератором. Уявіть, що потрібно порахувати до 5, але повторювати System.out.println() кожен раз це непрактично — краще використати цикл.

Інструкція for

for є циклом для повторення дій визначену кількість разів. На відміну від if, у якому є лише умова, для повторення ще потрібне початкове значення та крок. Процес присвоєння значення змінній на початку циклу назвали ініціалізацією (від англ. початок). Загальна схема:

for (ініціалізація; умова; де/інкремент) інструкція;

Отже, щоб порахувати від 0 до 5 з кроком 1 (не пропускаючи чисел), потрібно створити змінну (за звичаєм називають i) з початковим значенням, записати умову для перевірки кожен раз — чи i менше або дорівнює 5, і вказати, що при кожному повторенні потрібно збільшувати це число на 1:

for (int i = 0; i <= 5; i++) System.out.println(i);

Так як i (наш ітератор) це лише число, його можно вивести як будь-яке інше. Не забувайте, що щоб виконати декілька інструкцій, можна використовувати блок. Результатом программи вище буде:

0
1
2
3
4
5

Розгорнуте пояснення, якщо Ви не зрозуміли як це працює: створюється зміння i зі значенням 0; цикл for виводить це значення; i збільшується на 1 (i++), перевіряється умова “i менше або дорівнює 5” (1 ≤ 5?), і якщо так (true), то дія (виведення) повторюється знову, а якщо ні, то цикл закінчується.

Безумовно, можна змінити все: і початкове значення, щоб починати не з 0, а з іншого числа, і умову, і крок, щоб рахувати хоч у зворотній бік через кілька чисел. Ще одна цікавість — усі частини циклу for необов’язкові, хоча у більшості випадків пишуть всі. Тобто, можна змінити вже існуючу змінну або створити її до циклу:

int a = 10;
for (; i > 0; i--) {
	System.out.println("Число: " + i);
}

Якщо не перевіряти умов, тоді цикл буде нескінечний (код нижче нескінченно рахує від 1):

for (int count = 1; ; count++) System.out.println(count);

Також можна не змінювати значення при кожній ітерації (у такому випадку умова вірогідно буде некорисною, тому вона також не потрібна), і тоді код буде повторюватись завжди з однаковим числом:

for (int i = 3; ; ) System.out.println(i);

То ж, один із способів створити нескінченний цикл це:

for(;;) //інструкція;

Інструкція while

while в перекладі з англійської означає “поки”, тому так само, як if, потребує лише умови — “поки умова істина, то …”. Цей цикл навіть простіший, а застосувань у нього дуже багато, тому я думаю, тут достатньо менше пояснень. Загальна схема:

while (умова) інструкція;

Якщо невідомо, скільки разів конкретно потрібно виконати код, тоді треба застосовувати цей цикл. Наприклад, ми просимо користувача ввести число 5, але користувач вводить щось інше, то ж ми будемо запитувати його знову і знову, доки не буде введено 5. На Java це виглядатиме так:

Scanner sc = new Scanner(System.in);
System.out.println("Введіть 5.");
while (sc.nextInt() != 5) {
	System.out.println("Ви ввели не 5. Спробуйте ще раз.");
}

Таким чином, комп’ютер попросить ввести число 5, і поки введене число не буде дорівнювати 5, то буде запитувати знову. Зверніть увагу: while спочатку перевіряє умову. Якщо користувач з першого разу введе 5, то “Ви ввели не 5…” — інструкція всередині while — ніколи не буде виведене.

Порівняння рядків (тексту)

Можливо Ви помітили, що хоча ми розглянули різні типи даних, але порівнювали лише числа. Для цього були використані оператори == та !=, але порівнювати ними String буде некоректно через особливості Java. Для цього, у самого String є метод (функція) equals():

String a = "Java";
a.equals("Java"); //true
a.equals("C++"); //false

Інструкція do-while

do є майже тим самим, що й while, але спочатку виконує інструкції, а потім перевіряє умову, і якщо вона істина, то повторює ці інструкції. Отже, на відміну від простого while, тіло (саме так називають інструкції всередині; то є блок) буде виконане щонайменше 1 раз. Загальна схема:

do інструкція; while(умова);

Це корисно, якщо потрібно спробувати виконати щось, а потім перевірити чи вийшло, і якщо ні, то спробувати повторити:

do {
	vidchynytyDveri();
} while(!dveriVidchyneni());

Copyleft 🄯 2020–2024 Михайло Стецюк <yaBobJonez@gmail.com>.
Сайт має ліцензію Creative Commons License.
Дякую рідній школі та вчителям!