Цикли
У житті циклами називають якісь події, які постійно повторюються через певний проміжок часу. У 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());