АБОБА. Справочник по программированию на Java Методическое пособие
Скачать 242.41 Kb.
|
Многозвенная структура if-else-ifРаспространенной конструкцией программирования, построенной на основе последовательности вложенных операторов if, является многозвенная структура if-else-if. Она выглядит следующим образом: if(условие) оператор; else if(условие) оператор; else if(условие) оператор; ... ... ... else оператор; Операторы if выполняются последовательно, сверху вниз. Как только одно из условий, управляющих оператором if, становится равным true, программа выполняет оператор, связанный с данным оператором if, и пропускает остальную часть многозвенной структуры. Если ни одно из условий не выполняется (не равно true), программа выполнит заключительный оператор else. Этот последний оператор служит условием, используемым по умолчанию. То есть если проверка всех остальных условий дает отрицательный результат, программа выполняет последний оператор else. Если заключительный оператор else не указан, а результат проверки всех остальных условий равен false, программа не будет выполнять никаких действий. Ниже приведен пример программы, в которой многозвенная структура if-else-if служит для определения времени года, к которому относится конкретный месяц. // Демонстрация применения операторов if-else-if. class IfElse { public static void main(String args[]) { int month = 4; // Апрель String season; if(month == 12 || month == 1 || month == 2) season = "зиме"; else if(month == 3 || month == 4 || month == 5) season = "весне"; else if(month == 6 || month == 7 || month == 8) season = "лету"; else if(month == 9 || month == 10 || month == 11) season = "осени"; else season = "вымышленным месяцам"; System.out.println("Апрель относится к " + season + "."); } } Программа создает следующий вывод: Апрель относится к весне Оператор switchОператор switch – оператор ветвления в Java. Он предлагает простой способ направления потока выполнения команд по различным ветвям кода в зависимости от значения управляющего выражения. Часто он оказывается эффективнее применения длинных последовательностей операторов if-else-if. Общая форма оператора switch имеет следующий вид: switch (выражение) { case значение1: // последовательность операторов break; case значение2: // последовательность операторов break; ... ... ... case значениеN: // последовательность операторов break; default: // последовательность операторов, выполняемая по умолчанию } Выражение должно иметь тип type, short, int или char. Тип каждого значения, указанного в операторах case должен быть совместим с типом выражения. Дублирование значений case не допускается. Оператор switch работает следующим образом. Значение выражения сравнивается с каждым из значений констант в операторах case. При обнаружении совпадения программа выполняет последовательность кода, следующую за данным оператором case. Если значения ни одной из констант не совпадает со значением выражения, программа выполняет оператор 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; case 2: System.out.println("i равно двум."); break; case 3: System.out.println("i равно трем."); break; default: System.out.println("i больше 3."); } } } Эта программа генерирует следующий вывод: i равно нулю. i равно единице. i равно двум. i равно трем. i больше 3. i больше 3. Как видите, на каждой итерации цикла программа выполняет операторы, связанные с константой case, которая соответствует значению переменной i. Все остальные операторы пропускаются. После того, как значение i становится больше 3, оно перестает соответствовать какой-либо константе case, поэтому программа выполняет оператор default. Оператор break не обязателен. Если его опустить, программа продолжит выполнение со следующего оператора case. В некоторых случаях желательно использовать несколько операторов case без разделяющих их операторов break. Например, рассмотрим следующую программу: // В последовательности switch операторы break необязательны. class MissingBreak { public static void main(String args[]) { 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 i меньше 10 i меньше 10 i меньше 10 i равно или больше 10 i равно или больше 10 Как видите, программа выполняет каждый из операторов case, пока не достигнет оператора break (или конца оператора switch). Хотя приведенный пример был создан специально в качестве иллюстрации, пропуск операторов break находит множество применений в реальных программах. В качестве более реалистичного примера мы рассмотрим измененную версию приведенной ранее программы со временами года. В этой версии мы использовали оператор switch, что позволило создать более эффективную реализацию. // Усовершенствованная версия программы с временами года. class Switch { public static void main(String args[]) { int month = 4; String season; switch (month) { case 12: case 1: case 2: season = "зиме"; break; case 3: case 4: case 5: season = "весне"; break; case 6: case 7: case 8: season = "лету"; break; case 9: case 10: case 11: season = "осени"; break; default: season = "вымышленным месяцам"; } System.out.println("Апрель относится к" + season + "."); } } |