Говорят, что лучший программист — ленивый программист. Вместо того, чтобы совершать однотипные действия по нескольку раз, он придумает алгоритм, который сделает эту работу за него. А еще он сделает его хорошо, чтобы не нужно было переделывать.
Примерно так, чтобы много раз не писать один и тот же код, придумали циклы. Представим, что нам нужно вывести в консоль числа от 0 до 99. Код без цикла:
Условие выхода из цикла — это булево выражение. Если оно ложно, цикл будет завершен. В примере выше переменная ![Как используют цикл for в Java - 3]()

System.out.println(0);
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
// И так далее
Этот код займет 100 строк! Очень много. А вот как это будет выглядеть с циклом:
for(int i = 0; i < 100; i++) {
System.out.println(i);
}
Всего 3 строки!
Что такое циклы for?
Цикл for - это управляющая конструкция программного кода, которая нарушает линейность исполнения алгоритма и позволяет выполнить указанный код множество раз. Например, необходимо принять 30 капель лекарства. Алгоритм будет примерно такой:- Приготовить стакан.
- Открыть крышку.
- Получить 1 каплю.
- Получить 2 каплю. …
- Получить 30 каплю.
- Закрыть лекарство.
- Принять полученную порцию.
- Приготовить стакан.
- Открыть крышку капель.
- Получить 30 капель.
- Закрыть лекарство.
- Принять полученную порцию.
Принцип работы цикла for
For цикл используется следующим образом:
for(<начальная точка>; <условие выхода>; <операторы счетчика>) {
// Тело цикла
}
Пример перебора цифр от 0 до 5 и вывод каждой в консоль:
for(int i = 0; i < 5; i++) {
System.out.println(i);
}
Вывод:
0
1
2
3
4
Если перевести данную запись на человеческий язык, получится следующее:
“Создай переменную i с начальным значением 0, пока она не достигнет 5, прибавляй к ней по 1 и на каждом шаге записывай значение i в консоль.”
В основе работы цикла for в Java лежат три стадии, их можно изобразить следующей схемой:

i
увеличивается на 1. Если ее значение менее 5, цикл продолжается. Но как только i
станет больше или равно 5, цикл прекратится.
Оператор счетчика — выражение, которое выполняет преобразование переменной счетчика. В примере выше переменная i
увеличивалась на 1. То есть цикл будет выполнен ровно 5 раз. Если оператор счетчика будет прибавлять по 2 к переменной i
, результат будет иным:
for(int i = 0; i < 5; i = i + 2) {
System.out.println(i);
}
Вывод:
0
2
4
Также можно умножать переменную, делить, возводить в степень, в общем, делать все, что угодно. Главное, чтобы в результате преобразования получилось число.
Тело цикла — любой код, который может быть выполнен. В примере выше в теле цикла был вывод значения переменной i в консоль, однако содержимое данного тела ограничено задачей и фантазией.
Обобщая всю схему, принцип данного цикла — for — следующий: код, который находится в теле цикла, будет выполнен столько раз, сколько преобразований выполнит оператор счетчика до того, как будет достигнуто условие выхода из цикла.
Если задать условие выхода из цикла как true
:
for(int i = 0; true; i++) {
if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
То код после цикла будет помечен ошибкой unreachable statement
, так как никогда не будет исполнен.
Задача на смекалку: в результате запуска кода ниже будет ли выведено в консоль “Loop ended
” или цикл будет выполняться бесконечно?
for(int i = 0; i > -1; i++) {
if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
Ответ: будет. Переменная i рано или поздно достигнет максимального значения, а дальнейшее увеличение превратит ее в максимальное отрицательное, в результате чего условие выхода будет выполнено (i < = -1).
Цикл forEach
При работе с циклами иногда приходится перебирать массивы или коллекции. Обычно массив можно перебрать с помощью цикла for:
public void printAllElements(String[] stringArray) {
for(int i = 0; i < stringArray.length; i++) {
System.out.println(stringArray[i]);
}
}
И это правильно. Однако, для перебора всех элементов массива по очереди придумали конструкцию forEach. Ее сигнатура следующая:
for(<Тип элемента> <Имя переменной, куда будет записан очередной элемент> : <Название массива>) {
// Тело цикла
}
Перебрать массив строк и вывести каждую в консоль можно следующим способом:
public void printAllElements(String[] stringArray) {
for(String s : stringArray) {
System.out.println(s);
}
}
Тоже кратко и лаконично. Самое главное, нет нужды думать о счетчике и об условии выхода, все уже сделано за нас.
Как используются циклы for
А теперь рассмотрим несколько примеров использование цикла for в Java для решения разнообразных задач.Обратный цикл (от большего к меньшему)
for(int i = 5; i > 0; i--) {
System.out.println(i);
}
Вывод:
5
4
3
2
1
Несколько переменных и увеличение счетчика в теле цикла
В цикле for можно использовать несколько переменных, например их можно преобразовывать в операторе счетчика:
int a = 0;
for(int i = 5; i > 0; i--, a++) {
System.out.print("Шаг: " + a + " Значение: ");
System.out.println(i);
}
Вывод:
Шаг: 0 Значение: 5
Шаг: 1 Значение: 4
Шаг: 2 Значение: 3
Шаг: 3 Значение: 2
Шаг: 4 Значение: 1
Или объявить две переменные и идти по циклу, пока они не будут равны друг другу:
for(int i = 5, j = 11; i != j; i++, j--) {
System.out.println("i: " + i + " j: " + j);
}
Вывод:
i: 5 j: 11
i: 6 j: 10
i: 7 j: 9
Вряд ли это действие имеет какую-либо ценность, но знать о такой возможности полезно.
В цикле for также можно создавать внутренние циклы. В этом случае количество шагов цикла будет умножаться:
for(int i = 0; i < 5; i++) {
System.out.print(i + " | ");
for(int j = 0; j < 5; j++) {
System.out.print(j + " ");
}
System.out.print('\n');
}
Вывод:
0 | 0 1 2 3 4
1 | 0 1 2 3 4
2 | 0 1 2 3 4
3 | 0 1 2 3 4
4 | 0 1 2 3 4
В цикле со счетчиком j
есть возможность обращаться к счетчику внешнего цикла. Благодаря этому вложенные циклы — идеальный способ обхода двумерного, трехмерного и прочих массивов:
int[][] array = { {0, 1, 2, 3, 4 },
{1, 2, 3, 4, 5},
{2, 3, 4, 5, 6},
{3, 4, 5, 6, 7}};
for(int i = 0; i < array.length; i++) {
for(int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.print('\n');
}
Вывод:
0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
Досрочное завершение цикла
Если при обработке цикла нужно его прервать, используйте операторbreak
, который останавливает работу текущего тела цикла. Все последующие итерации также пропускаются:
public void getFirstPosition(String[] stringArray, String element) {
for (int i = 0; i < stringArray.length; i++) {
if(stringArray[i].equals(element)) {
System.out.println(i);
break;
}
}
}
Метод выведет позицию первого искомого элемента в массиве:
String[] array = {"one", "two", "three", "Jeronimo"};
getFirstPosition(array, "two");
Вывод:
1
Бесконечный цикл
Еще один способ создать бесконечный цикл for — оставить пустой область объявления счетчика, условие выхода и оператор счетчика:
for (;;) {
}
Но учти, что в большинстве случаев бесконечный цикл — свидетельство логической ошибки. У такого цикла обязательно должно быть условие выхода.

ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ