Java Урок 8: Циклы, do-while, for

Рассмотрим 2 цикла: do-while и for.

Скачать исходники для статьи можно ниже

Цикл do-while

Цикл do-while всегда выполняет свое тело по крайней мере один раз, потому что его условное выражение размещается в конце цикла. Общая форма цикла:

do {
      // тело цикла
} while (condition);

Каждая итерация цикла do-while сначала выполняет тело цикла, а затем оценивает условное выражение. Если это выражение — true, цикл повторится. Иначе цикл заканчивается. Как и у всех Java-циклов, condition должно быть булевским выражением.
Ниже показана программы с «тиками», которая демонстрирует цикл do-while.

// Демонстрирует do-while цикл.
public class DoWhile {
    public static void main(String[] args) {
        int n = 10;
        do {
           System.out.println("тик " + n);
           n - -;
        } while (n > 0);
    }
}

Вывод программы:
тик 10
тик 9
тик 8
тик 7
тик 6
тик 5
тик 4
тик 3
тик 2
тик 1

Цикл, for

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

for (initialization; condition; iteration) statement;

Если повторяется только один оператор, фигурные скобки не нужны.
Цикл for работает следующим образом. В начале работы цикла выполняется выражение initialization. В общем случае это выражение устанавливает значение переменной управления циклом, которая действует как счетчик. Важно понять, что выражение инициализации выполняется только один раз. Затем оценивается condition. Оно должно быть булевским выражением и обычно сравнивает переменную управления циклом с некоторым граничным значением. Если это выражение — true, то отрабатывают операторы из тела цикла, если — false, цикл заканчивается. Далее выполняется часть цикла iteration. Обычно это выражение, которое осуществляет инкрементные или декрементные операции с переменной управления циклом. Затем цикл реализовывает итерации. В каждом проходе цикла — сначала оценивается условное выражение, потом выполняется тело цикла и затем — выражение iteration. Этот процесс повторяется до тех пор, пока управляющее выражение не станет false.

Ниже приводится программа вывода «тиков», которая использует цикл for:

// Демонстрирует for-цикл.
 public class ForTick {
    public static void main(String[] args) {
        int n;
        for (n = 10; n > 0; n - -) {
            System.out.println("тик " + n);
        }
    }
}

Вывод программы:
тик 10
тик 9
тик 8
тик 7
тик 6
тик 5
тик 4
тик 3
тик 2
тик 1

Объявление переменных управления внутри цикла for.
Часто переменная, которая управляет циклом for, необходима только для целей цикла и не используется в другом месте. Когда дело обстоит так, можно объявить переменную внутри инициализационной части for. Например, предшествующая программа перекодирована так, чтобы переменная управления циклом n объявлялась типом int внутри заголовка for:

// Определение переменной управления циклом внутри for. 
public class ForTick {
    public static void main(String[] args) {
        // здесь n объявлена внутри заголовка for-цикла 
        for (int n = 10; n > 0; n - -) {
            System.out.println("тик " + n);
        }
    }
}

Когда переменная объявляется внутри заголовка for-цикла, важно помнить, что область ее действия заканчивается там же, где и у for-оператора (т. е. область действия переменной ограничена циклом for). Вне цикла for переменная прекратит существование. Если нужно использовать управляющую переменную цикла в другом месте программы, ее не следует объявлять внутри цикла for.
Когда управляющая переменная цикла не нужна где-то в другом месте, большинство Java-программистов объявляет ее внутри for-заголовка. Ниже показана небольшая программа, которая проверяет, является ли число простым (Простым называется число, которое делится только на собственное значение и на 1 (например, простыми являются числа 1, 2, 3, 5, 7, 11, 13 и т. д.). Обратите внимание, что управляющая переменная цикла i объявлена внутри for-заголовка, т. к. она нигде больше не нужна.

// Проверка на принадлежность к категории простых чисел.
public class FindPrim {
    public static void main(String[] args) {
        {
            int num;
            boolean isPrime = true;
            num = 14;
            for (int i = 2; i < num / 2; i++) {
                if ((num % i) == 0) {
                    isPrime = false;
                    break;
                }
            }
            if (isPrime) {
                System.out.println("Простое число");
            } else {
                System.out.println("Число не является простым");
            }
        }
    }
}

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

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

He трудно заметить, что цикл зависит от взаимодействия двух переменных. Так как цикл управляется двумя переменными, было бы полезно включить их непосредственно в заголовок оператора for вместо того, чтобы обрабатывать переменную вручную. К счастью, в Java обеспечена такая возможность. Чтобы позволить двум или большему числу переменных управлять циклом for, Java разрешает вам включать множественные операторы как в инициализационную, так и в итерационную части for-заголовка. Каждый оператор отделяется от следующего запятой.
Используя запятую, предыдущий цикл for можно закодировать более эффективно:

// Использование запятой.
public class Comma {
    public static void main(String[] args) {
        int a, b;
        for (a = 1, b = 4; a < b; a++, b - -) {
            System.out.println("а = " + a);
            System.out.println("b = " + b);
        }
    }
}

В этом примере инициализационная часть устанавливает значения как для а, так и для b. Два разделенных запятыми оператора в итерационной части выполняются каждый раз, когда цикл повторяется. Программа генерирует следующий вывод:
а = 1
b = 4
а = 2
b = 3

Замечание. В Java запятая — это разделитель, который применяется только в цикле for.

Подобно всем другим языкам программирования Java допускает вложение циклов. То есть один цикл может быть внутри другого. Например, следующая программа вкладывает for-циклы:

// Циклы могут быть вложенными.
public class Nested {
    public static void main(String[] args) {
        int i, j;
        for (i = 0; i < 5; i++) {
            for (j = i; j < 5; j++) {
               System.out.print(".");
            }
            System.out.println();
        }
    }
}

Вывод этой программы:
…..
….

..
.

Приведем более внятный пример этой программы:

public class NestedArray {
    public static void main(String[] args) {
        int i, j;
        for (i = 0; i < 5; i++) {
           for (j = i; j < 5; j++) {
                System.out.println("i = " + i + ",j = " + j);
           }
        }
    }
}

Вывод этой программы
i = 0,j = 0
i = 0,j = 1
i = 0,j = 2
i = 0,j = 3
i = 0,j = 4
i = 1,j = 1
i = 1,j = 2
i = 1,j = 3
i = 1,j = 4
i = 2,j = 2
i = 2,j = 3
i = 2,j = 4
i = 3,j = 3
i = 3,j = 4
i = 4,j = 4

В этом примере более наглядно видно, что на каждый вывод i, приходится 5 выводов j.

Введите свой email адрес для того, чтобы подписаться на мой блог:


knopkisoc

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