Урок 5. Циклы for, while и do-while
Цикл повторяет одни и те же команды много раз: вывести числа от 1 до 100, сложить все оценки, спрашивать пароль, пока не введут верный. В Java три основных цикла: for, while и do-while.
Цикл for
for удобен, когда заранее известно, сколько раз повторять:
public class Main {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
System.out.println("Шаг " + i);
}
}
}Шаг 1
Шаг 2
Шаг 3
Шаг 4
Шаг 5В скобках после for три части через точку с запятой:
int i = 1— начало: создаётся счётчик и получает первое значение. Выполняется один раз.i <= 5— условие: проверяется перед каждым повтором. Пока оно истинно, тело цикла выполняется.i++— шаг: выполняется после каждого повтора.
Один проход тела цикла называется итерацией. Счётчик может идти с любым шагом и в любую сторону: for (int i = 10; i > 0; i -= 2) даёт 10, 8, 6, 4, 2. Переменная i существует только внутри цикла.
Сумма чисел от 1 до 100:
public class Main {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println(sum);
}
}5050Переменная sum объявлена до цикла: если объявить её внутри, она будет создаваться заново на каждой итерации и обнуляться.
Цикл while
while повторяет, пока условие истинно, и подходит, когда число повторов заранее неизвестно. Например, сумма цифр числа:
public class Main {
public static void main(String[] args) {
int n = 2024;
int sum = 0;
while (n > 0) {
sum += n % 10;
n /= 10;
}
System.out.println(sum);
}
}8n % 10 — последняя цифра числа, n /= 10 отбрасывает её. Цикл идёт, пока цифры не кончатся: 4 + 2 + 0 + 2 = 8.
Условие проверяется до итерации. Если оно ложно сразу, тело не выполнится ни разу.
Цикл do-while
do-while проверяет условие после итерации, поэтому тело выполняется хотя бы один раз. Это удобно для проверки ввода: сначала спросить, потом решить, спрашивать ли снова.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n;
do {
System.out.println("Введите положительное число:");
n = in.nextInt();
} while (n <= 0);
System.out.println("Спасибо, " + n);
}
}-5
0
7Введите положительное число:
Введите положительное число:
Введите положительное число:
Спасибо, 7Переменная n объявлена до do: условие в while должно её видеть. После while (…) у do-while нужна точка с запятой.
break и continue
breakнемедленно завершает цикл;continueпропускает остаток текущей итерации и переходит к следующей.
public class Main {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if (i % 3 == 0) {
continue;
}
if (i > 7) {
break;
}
System.out.println(i);
}
}
}1
2
4
5
7Числа, кратные трём, пропускаются через continue, а на восьмёрке break останавливает цикл.
Цикл с условием while (true) сам не закончится никогда — выйти из него можно только через break. Так пишут программы, которые работают до команды «выход»:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int total = 0;
while (true) {
int x = in.nextInt();
if (x == 0) {
break;
}
total += x;
}
System.out.println("Сумма: " + total);
}
}5 10 -3 0Сумма: 12Вложенные циклы
Внутри цикла может быть другой цикл. Внутренний проходит целиком на каждой итерации внешнего:
public class Main {
public static void main(String[] args) {
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 5; j++) {
System.out.printf("%4d", i * j);
}
System.out.println();
}
}
} 1 2 3 4 5
2 4 6 8 10
3 6 9 12 15%4d выводит число шириной четыре знака — так столбцы получаются ровными. println() после внутреннего цикла переводит строку.
Частые ошибки
- Бесконечный цикл: в
whileзабыли изменить переменную условия, напримерi++. Программа «зависает» — остановите её клавишамиCtrl+Cв терминале или красной кнопкой в IntelliJ IDEA. - Лишняя итерация:
i <= nвместоi < n. Особенно часто — с массивами, у которых последний элемент имеет номер на единицу меньше длины. - Точка с запятой после for:
for (int i = 0; i < 5; i++);— у цикла пустое тело, а блок ниже выполнится один раз (и не скомпилируется, если в нём естьi).
Коротко
for (начало; условие; шаг)— когда число повторов известно.while (условие)— пока условие истинно; проверка до итерации.do { … } while (условие);— тело выполняется хотя бы раз.breakвыходит из цикла,continueпереходит к следующей итерации.- Переменную для суммы или счёта объявляют до цикла.