Урок J-9. Java операторы цикла (for, while, do-while), оператор break

Цикл в программировании используется для многократного повторения определенного фрагмента кода.  В Java существует 3 оператора цикла: for, while, do-while.

В этом уроке мы рассмотрим:

В конце урока предложены упражнения для закрепления материала.

Рассмотрим подробнее использование операторов цикла в Java.

При использовании конструкции for заранее известно, сколько раз необходимо осуществить повторение. При использовании конструкций while или  do-while  повторения будут происходить до тех пор, пока выполняется некоторое условие (логическое выражение)

Цикл for в Java.

Рассмотрим пример: вывод на экран числа от 1 до 10.

for (int i = 1; i <= 10; i++) {
  System.out.print(i + " ");
}

Конструкция for имеет следующий вид:

for (инициализация; условие; итерация) {
    //тело цикла
}

Инициализация — первый параметр, который содержит переменную и ее начальное значение. С помощью этой переменной будет подсчитываться количество повторений цикла.  В нашем примере это переменная int i = 1.

Условие — второй параметр, содержит некоторое логическое выражение — условие при котором будет выполняться цикл. В нашем примере это условие i <= 10.

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

Пример: Вывод на экран чисел от 10 до −10:

for (int i = 10; i > -11; i--) {
  System.out.print(i + " ");
}

Цикл while в Java.

Пример: Вывод на экран значений от 1 до 10.

int i = 1;
while(i < 11){
    System.out.println("i= " + i);
    i++;
}

Конструкция while имеет следующий вид:

while(логическое_выражение) {
    //тело цикла
}

Конструкция while выполняет выражение в фигурных скобках до тех пор, пока параметр логическое_выражение  имеет истинное значение (true).  Этот параметр является условием выполнения цикла. В выше приведенном примере, логическое выражение имеет вид  i < 11.

Истинность логического  выражения (условия) проверяется перед каждым шагом цикла, в том числе и перед первым. while так же называют оператором предусловия.

Приведем пример цикла, который не выполнится ни разу:

int i =10;
while(i < 5){
    System.out.println("i= " + i);
    i++;
}

Для реализации бесконечного цикла, в качестве параметра достаточно указать true

while(true) {
    //тело цикла
}

Цикл do-while в Java.

В отличие от оператора while, do-while  является оператором постусловия, который сначала выполняет тело цикла, а потом осуществляет проверку условия. Таким образом, тело цикла выполнится всегда хотя бы один раз.

Пример: Вывод на экран значений от 1 до 10.

int i = 1;
do{
    System.out.println("i = " + i);
    i++;
}while(i < 11);

Конструкция do — while имеет следующий вид:

do {
    //тело цикла
}while(логическое_выражение);

Как видно из конструкции, тело цикла выполняется перед проверкой условия. Впоследствии, тело цикла повторится в случае, если логическое_выражение было истинно. Оператор do-while  удобно применять, если некоторые действия необходимо выполнить, по крайней мере, один раз, а их повторение будет зависеть от условия.

Вспомним пример цикла while, который не выполнится ни разу, и перепишем его с помощью оператора do-while

int i =10;
do{
    System.out.println("i= " + i);
    i++;
}while(i < 5);

После выполнения цикла, на экран будет выведено значение i= 10.

Досрочный выход из цикла (оператор break)

Выполнение цикла можно прервать, если внутри тела цикла вызвать оператор break. После выполнения оператора break произойдет моментальный выход из цикла (не будет окончена даже текущая итерация). Управление передастся оператору, следующему за циклом.

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

public class BreakDemo {

    public static void main(String[] args) {

        //строка для поиска
        String searchMe = "Мама мыла раму";
        //количество символов в строке
        int max = searchMe.length();
        //символ, который нужно найти в строке
        char symb = 'ы';
        //переключатель найдено/не найдено
        boolean find = false;

        for (int i = 0; i < max; i++) {
            // если символ на позиции i в строке равен искомому символу
            if (searchMe.charAt(i) == symb) {
                //переключаемся в режим "найдено" и выходим из цикла
                find = true;
                break;
            }

        }

        //выводим соответствующее сообщение: найден или не найден символ
        if (find)
            System.out.println("Символ '" + symb + "' найден в строке");
        else
            System.out.println("Символ '" + symb + "' не найден в строке");

    }
}

Упражнения на тему Операторы цикла в Java:

  1. При помощи цикла for вывести на экран нечетные числа от 1 до 99.
  2. Дано число n при помощи цикла for посчитать факториал n!
  3. Перепишите программы с использованием цикла while.
  4. Даны переменные x и n вычислить x^n.
  5. Вывести 10 первых чисел последовательности 0, -5,-10,-15..
  6. Переделайте последний пример на break.Необходимо, чтобы заданный символ встречался в строке хотя бы 2 раза.

Комментарии и пинги к записи запрещены.

Комментариев к записи: 83

  1. Checo:

    Подскажите, это самый простой способ реализации или можно еще проще?
    public class FactFor {
    public static void main (String args[]) {

    int n = 6;
    int x = 1;

    for (int i = 1; i < n ; i++) {
    x *= i;
    }
    System.out.println(x);
    }
    }

    • Мария (admin):

      Для демонстрации кода используйте пожалуйста pastebin.com. В комментариях код икажается.

  2. Vlad:

    Простите великодушно, но как понять задание:
    2. Дано число n при помощи цикла for посчитать n! ?
    Что имеется ввиду? В каком-то уроке пропустил, что значит «!» после переменной?

  3. Vlad:

    О, спасибо! Школу закончил давно, с тех пор факториал встречался только на лекциях по высшей математике и после экзамена не использовался….

    Еще такой вопрос по заданию 6. Как понимать «Необходимо, чтобы заданный символ встречался в строке хотя бы 2 раза.» ?
    Какой «заданный символ»?

    • Мария (admin):

      Видимо придется пояснить в задании, ато кто-то еще не проходил, а кто-то проходил и забыл 😀
      Заданный, это тот который зададите. Посмотрите код последнего примера в этом уроке. Там ищется символ ‘ы’ в строке. Вы берете свою строку и любой символ, а потом ищите этот символ в этой строке. Если встречается 2 раза, то выводите соответствующее сообщение

      • Vlad:

        В таком случае оператор Break не подходит т.к. прекратит выполнение проверки после первого же совпадения, а необходимо добавить счетчик и проверить символы на совпадение до конца фразы. Или для сохранения выполнения прерывания придется придумывать всевдоусловие, например, достижения конца фразы.
        Или же сохранение в коде оператора Break не есть обязательным?

        • Мария (admin):

          Добавляете счетчик и условие: если счетчик = 2, то break. Вот и все изменения, которые надо сделать. Если например в середине строки уже были найдены 2 совпадения, то нет смысла дальше проверять строку и можно сделать досрочный выход из цикла

  4. Vlad:

    Видимо, я не верно понял условие «Необходимо, чтобы заданный символ встречался в строке хотя бы 2 раза.»
    Тогда да, еще раз спасибо.

  5. Alex:

    Здравствуйте Мария, у меня к вам вопрос. Вопрос про второе задание где мы ищем факториал числа. У меня получился такой код: http://pastebin.com/70D7kFbN
    И если его компилировать, то на консоль выдает промежуточные решение по порядку, пока не доходит до ответа, а вопрос у меня в том, что можно ли улучшить что-то(дописать что-либо), чтобы получить на консоле лишь ответ, чтобы не видеть этих промежуточных решений? Возможно ли это без кэширования ранее вычисленных данных?

Все материалы сайта study-java.ru являются результатом труда его авторов. Копирование материалов в некоммерческих целях без указания источника в виде прямой ссылки на сайт study-java.ru запрещено. Использование материалов в коммерческих целях разрешено только с письменного согласия автора. Нарушение авторских прав преследуется по закону.