Опубликован: 11.12.2003 | Доступ: свободный | Студентов: 43889 / 3318 | Оценка: 4.28 / 3.68 | Длительность: 30:42:00
ISBN: 978-5-9556-0006-2
Специальности: Системный архитектор
Лекция 10:

Операторы и структура кода. Исключения

< Лекция 9 || Лекция 10: 123456 || Лекция 11 >

Управление циклами

В языке Java имеется три основных конструкции управления циклами:

  • цикл while ;
  • цикл do ;
  • цикл for.

Цикл while

Основная форма цикла while может быть представлена так:

while(логическое выражение)
   повторяющееся выражение, или блок;

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

Операторы continue и break могут изменять нормальное исполнение тела цикла. Так, если в теле цикла встретился оператор continue, то операторы, следующие за ним, будут пропущены и выполнение цикла начнется сначала. Если continue используется с меткой и метка принадлежит к данному while, то выполнение его будет аналогичным. Если метка не относится к данному while, его выполнение будет прекращено и управление будет передано на оператор, или блок, к которому относится метка.

Если встретился оператор break, то выполнение цикла будет прекращено.

Если выполнение блока было прекращено по какой-то другой причине (возникла исключительная ситуация), то выполнение всего цикла будет прекращено по той же причине.

Рассмотрим несколько примеров:

public class Test {
   static int x = 5;
   public Test() {
   }
   public static void main(String[] args) {
      Test t = new Test();
      int x = 0;
      while(x < 5) {
      x++;
      if(x % 2 == 0) continue;
      System.out.print(" " + x);
      }
   }
}

На консоль будет выведено

1   3   5

т.е. вывод на печать всех четных чисел будет пропущен.

public class Test {
  static int x = 5;
  public Test() { }
  public static void main(String[] args) {
    Test t = new Test();
    int x = 0;
    int y = 0;
    lbl: while(y  < 3) {
    y++;
    while(x < 5) {
      x++;
      if(x % 2 == 0) continue lbl;
      System.out.println("x=" + x + " y="+y);
      }
    }
  }
}

На консоль будет выведено

x=1 y=1
x=3 y=2
x=5 y=3

т.е. при выполнении условия if(x % 2 == 0) continue lbl; цикл по переменной x будет прерван, а цикл по переменной y начнет новую итерацию.

Типичный вариант использования выражения while():

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

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

boolean b = false;
while(b) {
   System.out.println("Executed");
}

В данном случае строка System.out.println("Executed"); выполнена не будет.

Цикл do

Основная форма цикла do имеет следующий вид:

do
   повторяющееся выражение или блок;
while(логическое выражение)

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

Типичная конструкция цикла do:

int counter = 0;
do {
   counter ++;
   System.out.println("Counter is " 
     + counter);
} while(counter < 5);

В остальном выполнение цикла do аналогично выполнению цикла while, включая использование операторов break и continue.

Цикл for

Довольно часто бывает необходимо изменять значение какой-либо переменной в заданном диапазоне и выполнять повторяющуюся последовательность операторов с использованием этой переменной. Для выполнения такой последовательности действий как нельзя лучше подходит конструкция цикла for.

Основная форма цикла for выглядит следующим образом:

for(выражение инициализации; условие; 
    выражение обновления)
повторяющееся выражение или блок;

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

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

Условие должно быть логическим выражением и трактуется точно так же, как логическое выражение в цикле while(). Тело цикла выполняется до тех пор, пока логическое выражение истинно. Как и в случае с циклом while(), тело цикла может не исполниться ни разу. Это происходит, если логическое выражение принимает значение "ложь" до начала выполнения цикла.

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

Пример использования цикла for():

...
for(counter=0;counter<10;counter++) {
   System.out.println("Counter is " 
     + counter);
}

В данном примере предполагается, что переменная counter была объявлена ранее. Цикл будет выполнен 10 раз и будут напечатаны значения счетчика от 0 до 9.

Разрешается определять переменную прямо в предложении:

for(int cnt = 0;cnt < 10; cnt++) {
   System.out.println("Counter is " + cnt);
}

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

Любая часть конструкции for() может быть опущена. В вырожденном случае мы получим оператор for с пустыми значениями

for(;;) {
   ...
}

В данном случае цикл будет выполняться бесконечно. Эта конструкция аналогична конструкции while(true){}. Условия, в которых она может быть применена, мы рассмотрим позже.

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

for(i = 0, j = 0; i<5;i++, j+=2) {
   ...
}

Использование такой конструкции вполне правомерно.

< Лекция 9 || Лекция 10: 123456 || Лекция 11 >
Георгий Кузнецов
Георгий Кузнецов

1. По истечению срока курса, будет ли доступ к курсу закрыт? (в данном случае написано 29 января)

2. Так и не понял: что такое конструктор?

Вячеслав Лопачёв
Вячеслав Лопачёв

Хочу заново пройти курс. Можно ли как-то сбросить прогресс и обновить сертификат?

Максим Шарапов
Максим Шарапов
Россия, п. Зюкайка
Руслан Нов
Руслан Нов
Россия, Набережные Челны, Кадетская школа №82, 2011