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

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

11 i

равенство с выражением оператора switch. Компилятор не имеет аналогич­ных знаний длинного списка выражений if.

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

Операторы цикла (итераций) Java — это for, while и do while. Как вы, веро­ятно, знаете, цикл повторно выполняет один и тот же набор команд, пока не выполнится условие завершения. Java имеет набор циклических операто­ров для удовлетворения любой потребности программирования.

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

Цикл while — наиболее фундаментальный оператор цикла Java. Он повторя­ет оператор или блок операторов, пока его управляющее выражение имеет значение true. Вот его общая форма:

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

Здесь condition может быть любым булевским выражением. Тело цикла бу­дет выполняться до тех пор, пока условное выражение имеет значение true. Когда condition становится false, управление передается строке програм­мы, следующей непосредственно за циклом. Фигурные скобки не нужны, если повторяется одиночный оператор.

Следующий while-цикл считает в обратном порядке от 10, печатая точно десять "тик"-строк:

// Демонстрирует while-цикл, class While {

public static void main(String args[]) { int n = 10;

while(n > 0} (

System.out.println("тик " + n); n—; ) } }

Когда вы выполните эту программу, она "тикнет" ровно десять раз:

тик 10 тик 9 тик 8 тик 7

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

тик 6

тик 5

тик 4

тик 3 '

тик 2

тик 1

Так как цикл while оценивает условное выражение в самом начале своей работы, тело цикла не будет выполняться ни одного раза,.если условие сразу же имеет значение false. Например, в следующем фрагменте обращение к println о никогда не выполняется:

Int а = 10, Ь = 20;

while(а > Ь)

System.out.println("Эта строка никогда не выведется");

Тело цикла while (или любого другого цикла Java) может быть пустым. Это потому, что в Java синтаксически допустим пустой (null) оператор (который состоит только из точки с запятой). Например, рассмотрим следующую программу:

// Тело цикла может быть пустым, class NoBody {

public static void main(String args[]) { int i, j;

i = 100; j = 200;

// найти среднюю точку между i и j

while(++i < —j); // в этом цикле нет тела

System.out.println("Средняя точка " + i); } }

Эта программа находит среднюю точку между i и j. Она генерирует сле­дующий вывод:

Средняя точка 150

Посмотрим, как цикл while работает. Значения переменной i формирует операция инкремента, а значение j — декремента. Затем эти значения срав­ниваются друг с другом. Если новое значение i все еще меньше, чем новое значение j, цикл повторяется. Если i равно или больше j, цикл останавли­вается. На выходе из цикла i будет содержать значение, которое является средним между первоначальными значениями i и j. (Заметим, что эта про­цедура работает только тогда, когда в самом начале i меньше, чем j.) He

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

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

Оператор цикла do while

Как вы только что видели, если условное выражение, управляющее циклом while, первоначально имеет значение false, то тело цикла не будет выпол­няться вообще. Однако иногда желательно выполнить тело while-цикла по крайней мере один раз, даже если условное выражение сначала имеет зна­чение false. Другими словами, существуют ситуации, когда вы хотели бы проверить выражение завершения в конце цикла, а не в начале. К счастью, в Java имеется цикл do while, который делает именно это. Цикл do while всегда выполняет свое тело по крайней мере один раз, потому что его ус­ловное выражение размещается в конце цикла. Общая форма цикла:

do{

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

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

Ниже показана переделанная версия программы с "тиками", которая демон­стрирует цикл do while. Она генерирует тот же вывод, что и прежде.

// Демонстрирует do-while цикл, class DoWhile {

public static void main(String args[]) { int n = 10;

do {

System.out.println("тик " + n) ; n--;

} while(n > 0) ; } )

Цикл в этой программе, хотя и технически корректный, можно записать более эффектно следующим образом:

do (

System.out.println("тик " + n); } while(—n > 0);

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