Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
25 Апр 2022
7 мин
13450

Цикл for в Java: что это, как с ним работать

Конструкция, чтобы много раз выполнять один и тот же участок кода.

В обычной жизни мы часто сталкиваемся с периодическими явлениями. Например, дневным циклом — солнце каждый день всходит и заходит. Или годовым — зима, весна, лето, осень сменяют друг друга. В программировании, чтобы описать повторяющиеся действия, тоже используют циклы — синтаксические конструкции, которые позволяют не писать один и тот же код много раз.

Общее о циклах

Конструкцию цикла можно описать так:

Условие завершения цикла — пока условие истинно, цикл будет выполняться.

Тело цикла — действия, которые мы хотим выполнить.

Рассмотрим несколько вариантов простейшего описания циклов в Java.

А чтобы узнать все тонкости работы с Java, приходите на курс от Skypro «Java-разработчик». Вы не только разберетесь в циклах, протоколах и объектах, но и попрактикуетесь, защитите дипломный проект и сможете найти работу по новой профессии — эта гарантия прописана в договоре.

💡 Цикл while:

while(i<50) { //цикл будет выполняться, пока значение переменной i меньше 50.
	i++;   //увеличиваем значение переменной i на 1
System.out.println(i);
}

Условие завершения цикла может идти до или после его тела. Если условие цикла стоит после тела, то такой цикл называется циклом с постусловием. Его отличие от цикла с условием до тела в том, что минимум одна его итерация всегда будет выполнена.

💡 Цикл while с постусловием:

do {
i++;
System.out.println(i);
}while(i<50);

Тело цикла может содержать один или несколько операторов. Операторами могут быть и другие циклы, в таком случае они называются вложенными.

💡 Несколько вложенных циклов while:

while(i<50) {
	while(j<5) {
j++;
		System.out.println(i+j);
}
i++;
}

Цикл for

В примерах выше мы на каждой итерации увеличиваем значение переменной — индекса. И завершаем цикл, когда это значение достигает предела. В дополнение к полезным операциям в теле цикла приходится добавлять служебную операцию, чтобы контролировать поведение индекса. Еще при подобном алгоритме нужно отдельно описывать операцию инициализации индекса. Чтобы сделать описание подобных конструкций компактным и удобным, есть оператор цикла for.

Как работать с циклами, индексами, массивами и объектами, расскажут на курсе «Java-разработчик». Опытные преподаватели объяснят сложное простым языком, а наставники помогут выполнить практические задания. Эти проекты добавите в свое портфолио.

💡 Синтаксис цикла for:

for(<начальное значение индекса>; <условие завершения цикла>; <операторы управления индексом>) {
	// Тело цикла
}

💡 Пример цикла for:

for (int i=0;i<10;i++) {
	// Полезные команды
}

Справка: переменную индекса в цикле for часто именуют i по первой букве английского слова index.

Этот пример — каноническое описание цикла for. Такая конструкция удобна при выполнении действий, например, с элементами массива:

int[] array = …
for (int i=0;i<array.length;i++) {
	System.out.println(array[i]);
}

💡 Обратный цикл for

Индекс можно не только увеличивать, но и уменьшать. Такие циклы for называют обратными:

for (int i = array.length-1;i>=0;i--) {
	System.out.println(array[i]);
}

💡 Цикл for с произвольным шагом

Необязательно изменять значение индекса именно на единицу. Шаг может быть любым:

for (int i=0;i<array.length;i+=3) {
	System.out.println(array[i]);
}

💡 Вложенные циклы for

Два цикла for, где один цикл вложен в другой, позволяют легко работать с двумерными массивами — матрицами:

int[][] matrix = …
for (int i=0;i<matrix.length;i++) {
	for(int j=0;j<matrix[i].length;j++) {
		System.out.println(matrix[i][j]);
}
}
вложенные циклы for

Иллюстрация работы программы

Ограничений на глубину вложенности циклов в компиляторе Java нет. Но избегайте большого количества вложенных друг в друга циклов, так как иначе усложните код программы.

💡 Бесконечные циклы for

Если условие завершения цикла будет всегда истинным, вы получите бесконечный цикл:

for(int i=0;true;i++) {
	System.out.println(i);
}

В примере условие завершения всегда истинно — мы задали ему константное значение true. Поэтому цикл будет бесконечно увеличивать индексную переменную и печатать ее значение в консоли.

Выражения, задающие поведение оператора for, не относят к обязательным, их можно опустить. Оператор for будет таким:

for(;;) {
	System.out.println(“wow”);
}

С точки зрения компилятора такое описание — допустимо, ошибки при запуске программы не будет. В результате вы опять получите бесконечно выполняющийся цикл, в теле которого нет доступа к индексной переменной.

❗ Бесконечные циклы for — вырожденные варианты описания логики программы, поэтому применяйте их только в специальных случаях. В обычных же ситуациях следите, чтобы условие завершения обязательно выполнялось на определенной итерации цикла. Неожиданные появления бесконечных циклов в логике программы приводят к тому, что приложение зависает и работает нестабильно. А еще к бесконтрольному потреблению ресурсов компьютера.

Как использовать циклы правильно, узнаете на курсе Skypro «Java-разработчик». Понадобится всего три часа в день, чтобы освоить все тонкости работы младшего специалиста.

Операторы, изменяющие поведение цикла

Используйте оператор прерывания break, если хотите завершить цикл досрочно:

DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();
for (int i = 0; i<10; i++) {
	System.out.println(i);
	if (dayOfWeek == DayOfWeek.MONDAY && i = 5) {
		break;
}
}

Во все дни, кроме понедельника, программа напечатает цифры от нуля до девяти, а в понедельник — от нуля до пяти. Это произойдет, потому что оператор break завершит цикл досрочно — до того, как условие завершения вернет false.

работа оператора break на примере

Работа программы в среду 

пример работы оператора break

Работа программы в понедельник

Другой оператор, который меняет линейное выполнение команд в теле цикла, — continue. Он не прерывает цикл в целом, но сообщает программе, что нужно немедленно перейти к следующей итерации цикла:

DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();
for (int i = 0; i<10; i++) {
	if (dayOfWeek == DayOfWeek.FRIDAY && i = 5) {
		continue;
}
System.out.println(i);
}

В примере программа тоже будет печатать цифры от нуля до девяти. Но если ее запустить в пятницу, то цифру пять она не напечатает: оператор continue укажет, что нужно начать новую итерацию цикла и пропустить операцию вывода на экран.

работа оператора continue на примере

Работа программы во вторник

пример оператора continue

Работа программы в пятницу

Оператор foreach

Мы рассмотрели примеры цикла for, где полностью настраивали его поведение: задавали начальное значение индексной переменной, устанавливали шаг ее изменения, определяли условие завершения. Если же вы хотите перебрать элементы коллекции или массива и последовательно выполнить действия над каждым, начинайте с первого элемента (i=0).

Шаг будет равен единице. Завершать надо будет при достижении конца коллекции (i<array.length). А доступ к каждому следующему элементу получите путем прямого обращения к элементу массива. Для этого используют значение индексной переменной (array[i]). Но нужно будет опять писать однообразный служебный код, который не относится к логике программы.

Чтобы создавать подобные циклы было проще, в Java 1.6 добавили оператор foreach.

💡 Синтаксис оператора foreach:

for (<переменная>:<коллекция>) {
	// Тело цикла
}

Коллекция — массив или объект-наследник класса Iterable, элементы которого нужно последовательно перебрать.

💡  Пример оператора foreach:

String[] words = new String[] {“Раз”, “Два”, “Три”};
for (String word: words) {
	System.out.println(word);
}

В примере программа последовательно переберет все элементы массива words и напечатает их.

В теле foreach можно применять операторы break и continue: результат будет такой же, как и для обычного for.

Главное о цикле for в Java

  • Это частный случай цикла while. Его применяют, когда число итераций известно программе до начала цикла.
  • Значение переменной можно не только увеличивать, но и уменьшать — использовать обратный цикл for. Вложенные циклы for позволяют работать с двумерными массивами — матрицами.
  • Оператор break нужен, чтобы досрочно завершить цикл. Оператор continue меняет линейное выполнение команд.
  • Оператор foreach — это разновидность цикла for. Ее используют, когда нужно обработать все элементы массива или коллекции.

Изучите Java на онлайн-курсе от Skypro «Java-разработчик». Будете учиться по видеоурокам и текстовым шпаргалкам, написанным понятным языком. Выполните задания в реальной среде, разберетесь с трудностями на живых вебинарах, напишете проект в команде. Получите диплом за реальные знания, которых ждут от вас работодатели.

Опрос для читателей: Какой язык программирования лучше? Узнайте результат после голосования

Добавить комментарий