Цикл while и do-while в Java 17: подробное руководство
Цикл while и do-while в Java
Что такое цикл и зачем он нужен?
Представь, что ты даёшь роботу команду: «Шагай вперёд, пока не дойдёшь до стены». Робот делает шаг, проверяет, есть ли стена. Если стены нет — делает ещё шаг. И так снова и снова, пока условие не выполнится. Это и есть цикл — повторение одного и того же действия до тех пор, пока верно (истинно) некоторое условие.
В Java есть два похожих цикла: while и do-while. Они помогают автоматизировать повторяющиеся задачи, когда мы заранее не знаем, сколько раз нужно повторить действие.
Цикл while: «Сначала проверь, потом делай»
Синтаксис цикла while очень простой:
while (условие) {
// действие, которое повторяется
}
Как это работает:
- Проверяется условие в круглых скобках.
- Если условие истинно (
true), выполняется тело цикла (код в фигурных скобках). - После выполнения тела снова проверяется условие.
- Если условие стало ложным (
false), цикл завершается.
Важно: Если условие сразу ложное, тело цикла не выполнится ни разу!
Пример 1. Выведем числа от 1 до 5:
int count = 1;
while (count <= 5) {
System.out.println("Число: " + count);
count++; // увеличиваем счётчик на 1
}
Вывод:
Число: 1
Число: 2
Число: 3
Число: 4
Число: 5
Пример 2. Считываем числа с клавиатуры, пока не введём 0:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number = -1; // любое число, кроме 0
while (number != 0) {
System.out.print("Введи число (0 для выхода): ");
number = scanner.nextInt();
System.out.println("Ты ввёл: " + number);
}
System.out.println("Цикл завершён!");
}
}
Ввод-вывод:
Введи число (0 для выхода): 7
Ты ввёл: 7
Введи число (0 для выхода): 3
Ты ввёл: 3
Введи число (0 для выхода): 0
Ты ввёл: 0
Цикл завершён!
Цикл do-while: «Сначала сделай, потом проверь»
Цикл do-while — младший брат while. Отличие в том, что тело цикла выполняется хотя бы один раз, а условие проверяется после выполнения.
Синтаксис:
do {
// действие, которое повторяется
} while (условие);
Обрати внимание на точку с запятой в конце!
Пример 3. Игра «Угадай число» (робот загадал число 7, ты угадываешь):
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int secret = 7;
int guess;
do {
System.out.print("Угадай число (от 1 до 10): ");
guess = scanner.nextInt();
if (guess != secret) {
System.out.println("Не угадал! Попробуй ещё.");
}
} while (guess != secret);
System.out.println("Поздравляю! Ты угадал!");
}
}
Ввод-вывод:
Угадай число (от 1 до 10): 3
Не угадал! Попробуй ещё.
Угадай число (от 1 до 10): 7
Поздравляю! Ты угадал!
Разбор типичных задач
Задача «Робот-шахтёр»
Робот собирает кристаллы, пока энергия в сумке не станет 100 или больше. Каждый кристалл даёт разное количество энергии.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int energy = 0;
while (energy < 100) {
System.out.print("Сколько энергии даёт кристалл? ");
int crystal = scanner.nextInt();
energy = energy + crystal;
System.out.println("Энергия в сумке: " + energy);
}
System.out.println("Сумка полна! Энергия: " + energy);
}
}
Задача «Юный садовод»
Алекс посадил росток высотой 5 см. Каждый день росток увеличивается в 2 раза. Нужно узнать, через сколько дней он достигнет высоты 80 см.
public class Main {
public static void main(String[] args) {
int height = 5;
int target = 80;
int days = 0;
while (height < target) {
height = height * 2;
days++;
System.out.println("День " + days + ": высота " + height + " см");
}
System.out.println("Росток достиг высоты " + target + " см за " + days + " дней");
}
}
Вывод:
День 1: высота 10 см
День 2: высота 20 см
День 3: высота 40 см
День 4: высота 80 см
Росток достиг высоты 80 см за 4 дней
Задача «Обратный отсчёт»
Доктор Вэнс запускает машину времени с координаты n и уменьшает её на 1 каждый шаг, пока не дойдёт до 0.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Введи начальную координату: ");
int n = scanner.nextInt();
while (n >= 0) {
System.out.println("Текущая координата: " + n);
n--;
}
System.out.println("Машина остановилась!");
}
}
Ввод-вывод (n = 3):
Введи начальную координату: 3
Текущая координата: 3
Текущая координата: 2
Текущая координата: 1
Текущая координата: 0
Машина остановилась!
Частые ошибки новичков
- Бесконечный цикл. Если забыть изменить переменную в условии, цикл будет выполняться вечно. Например:
int i = 0; while (i < 5) { System.out.println("Привет!"); // забыли i++ — программа зависнет } - Путаница while и do-while. Если нужно, чтобы действие выполнилось хотя бы один раз (например, меню с выбором), используй
do-while. Если действие может не выполниться ни разу — используйwhile. - Забытая точка с запятой после do-while. В
whileточки с запятой нет, а вdo-while— есть! - Условие, которое никогда не станет ложным. Например, если ты проверяешь
while (x != 0), но x всегда положительное и никогда не становится 0.
Итоговый пример: «Волшебная экспедиция»
Юный исследователь нашёл Артефакт Силы. Артефакт начинает светиться с силой 1. Каждую секунду его сила удваивается, но если сила превышает 1000, артефакт перегревается и отключается. Нужно вывести силу артефакта каждую секунду, пока он работает.
public class Main {
public static void main(String[] args) {
int power = 1;
int second = 1;
System.out.println("Артефакт активирован!");
while (power <= 1000) {
System.out.println("Секунда " + second + ": сила " + power);
power = power * 2;
second++;
}
System.out.println("Артефакт перегрелся и отключился!");
System.out.println("Максимальная сила: " + power);
}
}
Вывод:
Артефакт активирован!
Секунда 1: сила 1
Секунда 2: сила 2
Секунда 3: сила 4
Секунда 4: сила 8
Секунда 5: сила 16
Секунда 6: сила 32
Секунда 7: сила 64
Секунда 8: сила 128
Секунда 9: сила 256
Секунда 10: сила 512
Секунда 11: сила 1024
Артефакт перегрелся и отключился!
Максимальная сила: 2048
Запомни главное: while проверяет условие перед выполнением, do-while — после. Оба цикла повторяют действия, пока условие истинно. Используй их, когда не знаешь точное количество повторений!