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

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

if(k > 100) с = d; // этот if else а = с; // связан с этим else } else а = d; // этот else относится к if(i == 10)

Как указывают комментарии, заключительный else не связан с if (j < 20), потому что он не в одном с ним блоке (хотя это и самый близкий if без

else). Последний else СВЯЗаН С if(i == 10). Внутренний else ОТНОСИТСЯ

к if (k> loo), потому что это самый близкий if в пределах данного блока.

Многозвенный if-else-if

Общую программную конструкцию, которая основана на последовательно­сти вложенных if, называют многозвенным (ladder) if-else-if. Эта конст­рукция выглядит примерно так:

if(conditionl)

statement!; else if(condition^)

statements; else if(condition^)

statements;

else

statement^;

Операторы if выполняются сверху вниз. Как только одно из условий, управляющих оператором if, становится true, оператор, связанный с этим if, выполняется, а остальная часть многозвенной схемы пропускается. Если ни одно из условий не true, то будет выполнен последний оператор else. Заключительный else действует как условие по умолчанию: если все другие условные проверки не успешны, то выполняется последний оператор else. Если последний else отсутствует и все другие условия — false, то никакого действия выполняться не будет.

Программа, использующая многозвенный if-else-if для определения вре­мени года, в котором находится указанный (в переменной month) месяц:

// Демонстрирует операторы if-else-if. class IfElse {

public static void main(String args[]) {

int.month =4; // Апрель

String season;

if(month ==12 || month == 1 || month == 2) season = "Зима";

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

else if(month = 3 || month == 4 || month == 5)

season = "Весна"; else if(month == 6 I| month == 7 || month = 8}

season = "Лето"; else if(month = 9 |I month ==10 || month == 11)

season = "Осень"; else

season = "Непонятный месяц";

System.out.printIn("Апрель это " + season + "."); } } .

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

Апрель это Весна.

Независимо от того, какое значение вы задаете для переменной month, в многозвенной схеме будет выполняться один и только один оператор при­сваивания.

Оператор switch

Оператор switch — это Java-оператор множественного ветвления. Он пере­ключает выполнение на различные части кода программы, основываясь на значении выражения, и часто обеспечивает лучшую альтернативу, чем длинный ряд операторов if-eise-if. Общая форма оператора switch:

switch (expression) { •case valuel:

// последовательность операторов! break; case values:

// последовательность операторов2 break;

case valueN:

// последовательность операторовЫ

break; default:

// последовательность операторов по умолчанию )

Здесь expression ДОЛЖНО иметь ТИП byte, short, int ИЛИ char; каждое value, указанное в операторах case, должно иметь тип, совместимый с типом

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

выражения. Каждое значение case должно быть уникальной константой (а не переменной). Дублирование значений case недопустимо.

Оператор switch работает следующим образом. Значение выражения срав­нивается с каждым из указанных значений в case-операторах. Если соответ­ствие найдено, то выполняется кодовая последовательность, следующая по­сле этого оператора case. Если ни одна из case-констант не соответствует значению выражения, то выполняется оператор default. Однако оператор default необязателен. Если согласующихся case нет, и default не присутст­вует, то никаких дальнейших действий не выполняется.

Оператор break используется внутри switch, чтобы закончить последова­тельность операторов. Когда встречается оператор break, выполнение пере­дается к первой строке кода, которая следует за полным оператором switch. Он создает эффект досрочного выхода из switch.

Простой пример, который использует оператор switch:

// Простой пример с оператором switch, class SampleSwitch {

public static void main(String args [] ) { for(int i=0; i<6; i++) switch(i) { case 0:

System.out.println("i равно нулю."); break/­case 1:

System.out.println("i равно единице."); break; t case 2:

System.out.println("i равно двум."); break; case 3:

System.out.println("i равно трем."); break; default:

System.out.println("i больше трех."); } } }

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

i равно нулю. i равно единице. i равно двум. i равно трем.

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

i больше трех. i больше трех.

Не трудно заметить, что на каждом проходе цикла выполняются операторы, связанные с case-меткой, которая соответствует переменной цикла i. Все другие case-ветви обходятся. После того как i становится больше трех, ни­какого соответствия case-меткам не возникает, поэтому выполняется опера­тор default.

Оператор break — необязательный. Если он пропускается, выполнение бу­дет продолжено со следующей case-метки. Иногда желательно иметь мно­жественные case-ветви без операторов break между ними. Например, рас­смотрим следующую программу:

// switch с пропущенными операторами break, class MissingBreak {

public static void main(String args[]J { for(int i=0; i<12; i++) switch(i) { case 0: case 1: case 2: case 3: case 4:

System.out.println ("i меньше 5"); break; case 5: case 6: case 7: case 8: case 9:

System.out.println("i меньше 10"); break; default:

System.out.println ("i равно 10 или больше"); } } }

Эта программа генерирует следующий вывод:

i меньше 5

i меньше 5

i меньше 5

i меньше 5

i меньше 5

i меньше 10

i меньше 10

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