Урок 5

Операторы цикла

Цикл — это многократно повторяющийся фрагмент программы.

В Java существует два типа циклов: типа «пока» и типа «n-раз».

Первый тип «пока» предназначен для повторения какого-то действия до тех пор, пока выполняется некоторое условие. Пример: увеличивать число на 5 до тех пор, пока оно не станет трёхзначным. Это циклы while и do-while:

1. while (boolexpr) { /*операторы*/ } 
2. do { /*операторы*/ } 
   while (boolexp); 

Второй тип «n-раз» предназначен для повторения каких-то действий заранее известное количество раз. Пример: умножить число само на себя 4 раза. Это циклы for и for-each.

3. for(инициализация; условие; итерация){ /*операторы*/ }
4. for(тип итерационная_переменная: массив){ /*операторы*/ } 

Условие завершения цикла должно быть очевидным, чтобы цикл не «сорвался» в бесконечный цикл.

Рассмотрим их по порядку:

1. Цикл while

Пример 1. Пример цикла while

Рассмотрим синтаксис на следующем примере. После ключевого слова while в круглых скобочках указывается выражение, которое должно возвращать значение типа boolean - это условие цикла. Далее в фигурных скобочках указываем тело цикла - код, который будет повторятся, пока условие цикла возвращает значение true. Пока выполняется условие n>0, будет выполняться System.out.println. Мы видим, что переменная n меняется внутри тела цикла, что позволяет в конце-концов выйти из него. 

public class While1 {
    public static void main(String[] args) {
        int n = 10;
        while (n > 0) {
            System.out.println("Тик " + n--);
        }
    }
}

Пример 2. Пример цикла while

Этот пример показывает вариант использования цикла while без тела. Даны два числа 100 и 200 и необходимо найти середину между ними. Значение i увеличивается на 1 каждую итерацию цикла, а j уменьшается до тех пор, пока они не станут равны. Изменение i и j происходит в условии цикла, поэтому тело цикла не нужно. Вместо тела просто ставится точка с запятой.

public class NoBody {
    public static void main(String[] args) {
        int i = 100;
        int j = 200;        // найти середину между i и j
        while (++i < --j) ; // цикл без тела
        System.out.println("Середина: " + i);
    }
}

Пример 3. Пример бесконечного цикла while

Цикл while может применяться для организации бесконечных циклов в виде while(true):
public class EndlessLoop {
    public static void main(String[] args) {
        int i = 0;
        while (true) {
            System.out.println(i++);
        }
    }
}

2. Цикл do-while

Цикл do-while похож на цикл while - это тоже цикл типа «пока», у него так же есть тело и условие, которые пишется после тела. Единственное отличие цикла do-while от while - условие проверяется после выполнения тела. Тело do-while выполнится хотя бы раз, даже если условие возвращает значение false.

Пример 4. Пример цикла do-while

public class DoWhile {
    public static void main(String[] args) {
        int n = 10;
        do {
            System.out.println("Тик " + n--);
        } while (n > 0);
    }
}

3. Цикл for

Цикл for используется в случаях, когда точно известно количество итераций.

Общая форма цикла for:

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

Пример 5. Пример цикла for

 

public class ForTick {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            System.out.println("Тик " + i);
        }
    }
}

В первом параметре обычно выбирают какую-то переменную, с помощью которой будет подсчитываться количество повторений цикла. Её называют счетчиком. Эту переменную обычно называют i. Счётчику задают некоторое начальное значение. Для цикла for не рекомендуется в цикле изменять индекс цикла.

Во втором параметре указывают некоторое ограничение на счётчик (указывают, до какого значения он будет изменяться).

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

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

Пример 6. Пример цикла for

В первом параметре можно через запятую инициализировать несколько переменных, как это показано в следующем примере:

public class Comma {
    public static void main(String[] args) {
        for (int i = 1, j = 4; i < j; i++, j--) {
            System.out.println("i = " + i);
            System.out.println("j = " + j);
        }
    }
}

4. Цикл for-each

Цикл for-each используется для перебора элементов массивов.

Общая форма:

for(тип итерационная_переменная: массив){ /*операторы*/ }

Пример 7. Пример цикла for-each

При прохождении цикла переменной str автоматически присваивается значение, равное значению следующего элемента массива args
public class ForEach {
    public static void main(String[] args) {
        for (String str : args) {
            System.out.println("Значение: " + str);
        }
    }
}



0 Comments
Leave your comment: