Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Модуль 4. Урок 3. Циклы в Java. Введение в Java

Видео может быть заблокировано из-за расширений браузера. В статье вы найдете решение этой проблемы.

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

Для начала определимся:

  • условие — это выражение, которое пишется при объявлении цикла. Результатом вычисления выражения должен быть boolean результат. Либо true, либо false. Например: a < b, something == something, myObject.equals(othetObject), !myObject.equals(othetObject), alpha != beta и так далее. Про логические операторы нужно почитать тут.
  • break — это ключевое слово, которое прерывает работу цикла. Пишется в теле цикла Его нужно писать только если необходимо прекратить работу цикла до его логического завершения согласно заданному условию.
  • continue — это ключевое слово принуждает цикл начать новую итерацию тут же. А код следующий за continue, в теле текущего цикла, не будет выполнен. continue нужно писать в теле цикла. 

Рассмотрим варианты циклов

Если мы знаем заранее, сколько раз нужно повторить некое действие, то используем цикл for.

for (int i = начальноеЗначениеСчетчика; условие; алгоритмИзмененияСчетчика) {
    // действие;
    // действие;
}

В этом цикле нужно:

  • объявить счетчик, который будет считать итерации текущего цикла;
  • задать условие, результатом вычисления которого будет либо true либо false;
  • задать алгоритм изменения счетчика.

Счетчик принято объявлять типа int. Даже для нескольких итераций. И он не обязан начинаться с нуля.

Цикл for будет проверять условие перед началом каждой итерации. Пока условие равно true — цикл будет выполнять итерацию. После каждой итерации цикл будет менять счетчик.

Пример в коде:

for (int i = 0; i <= 10; i++) {
    System.out.println("Something important"); // 11 раз будет напечатан текст "Something important"
}

Его можно прервать раньше времени словом break или "проскочить" итерацию словом continue.

for (int i = 0; i <= 10; i++) {
    if (i % 2 == 0) { // остаток от деления на два равен нулю?
        System.out.println(i); //
        continue; // сразу переходим к следующей итерации
    }
    if (i == 9) {
        System.out.println("Finish now!");
        break; // финиш жизни цикла
    }
}

Для работы с массивами (и другими структурами данных) иногда лучше использовать foreach.

for (ТипСсылки имяСсылкиНаЭлемент : ссылкаНаМассив) {
    // действие;
    // действие;
}

Этот цикл получает ссылку на массив справа от двоеточия. А ссылка слева от двоеточия ссылается на ячейку №0 этого массива. С каждой итерацией ссылка будет ссылаться на следующую ячейку массива. И так до конца массива. Естественно, что в каждой ячейке может быть некий элемент. Содержимые в массиве элементы и ссылка слева от двоеточия должны быть одного типа.

После достижения последней ячейки массива цикл foreach завершает свою работу. Этот цикл тоже можно прервать раньше времени словом break или "проскочить" итерацию словом continue.

В коде это будет выглядеть так:

// где-то в main-методе...
int[] testArray = new int[100];
// наполним массив случайными числами в пределах от 0 до 99
// для записи элементов в массив — foreach не подходит
for (int i = 0; i < testArray.length; i++) {
    testArray[i] = new Random().nextInt(100); // для работы рандома нужно импортировать соответствующий класс
}
// теперь применим foreach
int numberOfIteration = 1; // просто для наглядности будем выводить номер итерации
for (int oneElementInArray : testArray) {
    if (oneElementInArray >= 50) { 
        System.out.printf("\nIteration number: %d __ Element: %d", numberOfIteration,
                oneElementInArray); // печатаем в консоль на новой строке номер итерации
        // и элемент
        numberOfIteration++;
        continue; // переходим к следующей итерации и упускаем следующие строки в теле цикла
    }
    if (oneElementInArray == 0) { // сработает не в каждом запуске программы
        System.out.println("\nWow, this is a numerical donut!");
        break; // цикл завершится как только попадется элемент 0
    }
}

Если заранее не знать количество повторений действий, то используем цикл while.

while (условие) {
    // действие;
    // действие;
}

Цикл while будет выполняться пока вычисление условия будет иметь результат true. Если написать в условии просто слово true, то цикл будет вечным!

Вот пример while в коде:

// где-то в main-методе...
int someNumber = 1;
while (someNumber != 0) {
    someNumber = new Random().nextInt(100); // для работы рандома нужно импортировать соответствующий класс
    System.out.println("Current someNumber is: " + someNumber);
}

Обратите внимание, что нам пришлось задать начальное значение для someNumber равное 1. Иначе цикл while ни разу не выполнился бы.

Но, для подобных случаев есть иная форма записи цикла: do-while.

do {
    // действие;
} while (условие);

Теперь мы можем для someNumber назначить начальное значение равное 0. Пример в коде:

// где-то в main-методе...
int someNumber = 0;
do {
    someNumber = new Random().nextInt(100); // не забываем импортировать класс Random
    System.out.println("Current someNumber is: " + someNumber);
} while (someNumber != 0);

Такая форма записи позволяет выполнить цикл хотя бы один раз и только потом проверить условие.

Полезные ссылки

Циклы for и while могут быть переиспользованы между собой:

whilefor

int i = 3;
while (i >= 0)
{
    System.out.println(i);
    i--;
}

for (int i = 3; i >= 0; i--)
{
    System.out.println(i);
}

int i = 0;
while ( i ‹ 3 )
{
    System.out.println(i);
    i++;
}

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

while (true)
    System.out.println("e");

for (; true; )
    System.out.println("e");

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»