Курс

"Программирование Java"

Циклы for, while, do while

Циклы

Еще одним видом управляющих конструкций являются циклы. Циклы позволяют в зависимости от условий выполнять определенное действие или последовательность действий множество раз. В языке Java есть следующие виды циклов:

for

while

do...while

Цикл for

Цикл for имеет следующее формальное определение:

for ([инициализация счетчика]; [условие]; [изменение счетчика])

{

    //тело цикла

}

Рассмотрим цикл for на примере, вывода в консоль квадратов чисел от 0 до 9:

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

Первая часть объявления цикла int i = 1 создает и инициализирует счетчик i. Счетчик необязательно должен представлять тип int. Это может быть и любой другой числовой тип, например, float. Перед выполнением цикла значение счетчика будет равно 1. В данном случае это то же самое, что и объявление переменной.

Вторая часть - условие, при котором будет выполняться цикл. В данном случае цикл будет выполняться, пока i не достигнет 9.

И третья часть - приращение счетчика на единицу. Опять же нам необязательно увеличивать на единицу. Можно уменьшать: i--.

В итоге блок цикла сработает 8 раз, пока значение i не станет равным 9. И каждый раз это значение будет увеличиваться на 1.

 

Нам необязательно указывать все условия при объявлении цикла. Например, мы можем написать так:

int i = 1;
for (; ;){
    System.out.println(i * i);
    i++; //Теперь нет инициализированной переменной-счетчика, нет условия, поэтому цикл будет работать вечно - бесконечный цикл
}

Цикл do

Формальное определение:

do {

    //тело цикла

} while([условие]);

Цикл do сначала выполняет код тела цикла, а потом проверяет условие в инструкции while. И пока это условие истинно, цикл повторяется. Например:

int j = 7;
do{
    System.out.println(j);
    j--;
}
while (j > 0);

В данном случае код цикла сработает 7 раз, пока j не окажется равным нулю. Важно отметить, что цикл do гарантирует хотя бы однократное выполнение действий, даже если условие в инструкции while не будет истинно. Если написать:

int j = -1;
do{
    System.out.println(j);
    j--;
}
while (j > 0);

Хотя переменная j изначально меньше 0, цикл все равно один раз выполнится

Цикл while

Формальное определение:

while([условие]) {

    //тело цикла

Цикл while сразу проверяет истинность некоторого условия, и если условие истинно, то код цикла выполняется:

int j = 6;
while (j > 0){

    System.out.println(j);
    j--;
}

Получим вывод на экран чисел от 6 до 0(6, 5, 4, 3, 2, 1)

Операторы continue и break

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

for (int i = 0; i < 10; i++){
    if (i == 5)
        break;
    System.out.println(i);
}

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

Теперь сделаем так, чтобы если число равно 5, цикл не завершался, а просто переходил к следующей итерации. Для этого используем continue:

for (int i = 0; i < 10; i++){
    if (i == 5)
        continue;
    System.out.println(i);
}

В этом случае, когда выполнение цикла дойдет до числа 5, программа просто пропустит это число и перейдет к следующему

Приложение

Break:

import java.util.Scanner;

 

public class Main {

 

    public static void main(String[] args){

 

        //Задание 1. Вводим цилочисленное а. Вычитая 2 из значения переменной а,

        // выводим рез-тат на экран до тех пор, пока а > 0. Но если значение а = 25,

        //то продолжать движение к 0 не нужно.

        Scanner in = new Scanner(System.in);

        //вводим а

        int a = in.nextInt();

 

        while ( a > 0 ){

            a -= 2; // a = a - 2;

            System.out.println( a );

            if ( a == 25 ) {

                break;

            }

        }

 

    }

 

}

 

Continue:

import java.util.Scanner;

 

public class Main {

 

    public static void main(String[] args){

 

        //Задание 1. Вводим цилочисленное а. Вычитая 1 из значения переменной а,

        // выводим рез-тат на экран только в случае, если значение четное.

        Scanner in = new Scanner(System.in);

        //вводим а

        int a = in.nextInt();

 

        while ( a > 0 ){

            a--;

            if ( a % 2 != 0){

                continue;

            }

            System.out.println( a );

        }

    }

}

 

Do/while:

import java.util.Scanner;

 

public class Main {

 

    public static void main(String[] args){

 

 

        Scanner in = new Scanner(System.in);

 

        int a = in.nextInt();

 

        //цикл do ... while().  !!! Выполняется МИНИМУМ 1 раз

        do {

            System.out.println( a );

            a--;

        }while ( a > 0);

    }

}

 

For:

import java.util.Scanner;

 

public class Main {

 

    public static void main(String[] args){

 

        //Задача 2. Вывести все числа от 0 до значения переменной а.

        Scanner in = new Scanner(System.in);

 

        int a = in.nextInt();

 

        //цикл for. for(нач. значение; условие; шаг){}

        for ( int i = 0; i < a; i++ ){

            System.out.println( i );

        }

    }

}

 

While:

import java.util.Scanner;

 

public class Main {

 

    public static void main(String[] args){

 

        Scanner in = new Scanner(System.in);

 

        int a = in.nextInt();

 

        while ( a > 0 ){

            System.out.println( "Александр" );

            a--; // a = a - 1;

        }

    }

}

Полезный код