Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
49
Добавлен:
12.05.2015
Размер:
1.82 Mб
Скачать

Глава 5. Управляющие операторы 123

for(a=l, b=4; a<b; a++, b—) { System.out.println("a = " + a); System.out.println("b = " + b) ; } } >

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

а = 1

b = 4

а = 2

Ь = 3

Если вы знакомы с C/C++, то знаете, что на этих языках запятая — это опера­тор, который можно использовать в любом правильном выражении. В Java, од­нако, дело обстоит не так. В Java запятая — это разделитель, который приме­няется только в цикле for.

Некоторые разновидности цикла for

Цикл for поддерживает ряд разновидностей, которые усиливают его гиб­кость и расширяют применимость. Причина такой гибкости заключается в том, что три части его заголовка — инициализация, проверка условия и ите­рация — могут использоваться не только для внутренних целей. На самом деле эти три части цикла for можно применять для решения любой задачи. Рассмотрим некоторые примеры.

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

boolean done = false/-

for (int 1=1; Idone; i++) {

// ...

if ( interrupted () ) done = true; }

В этом примере цикл for продолжает выполняться до тех пор, пока booiean-переменная done имеет значение true. Он не проверяет значения 1.

124 ' . Часть I. Язык Java

Другая интересная разновидность цикла for — когда инициализационное или итерационное выражение (или оба) могут отсутствовать, как показано в следующей программе:

// Части цикла for могут быть пустыми, class ForVar {

public static void main(String argsf]) { int i ; boolean done = false;

i = 0;

for(; !done;) {

System.out.println("i равно " + i) ; if(i == 10) done = true; i++; } } }

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

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

for(;;) {

// . . . • '

}

Этот цикл будет выполняться всегда, потому что нет условия, при котором он завершится. Хотя существуют некоторые программы, такие как команд­ные процессоры операционных систем, требующие бесконечного цикла, большинство "бесконечных циклов" в действительности является просто циклами со специальными требованиями завершения. Как вы вскоре увиди­те, существует способ завершить цикл — даже бесконечный (подобный по­казанному выше), который не использует нормальное условное выражение цикла.

Соседние файлы в папке JavaLit