Чтение онлайн

на главную

Жанры

Java: руководство для начинающих
Шрифт:

В версиях Java, предшествующих JDK 7, выражение, управляющее оператором switch, должно быть типа byte, short, int, char или перечислением. (Подробнее о перечислениях речь пойдет в главе 12.)

Начиная с версии JDK 7, выражение может относиться к типу String. Это означает, что в современных версиях Java для управления оператором switch можно пользоваться символьной строкой. (Этот прием программирования демонстрируется в главе 5 при рассмотрении класса String.) Но зачастую в качестве выражения, управляющего оператором switch, вместо сложного выражения употребляется простая переменная.

Последовательность операторов из ветви default

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

Ниже приведен пример программы, демонстрирующий применение оператора switch. // Демонстрация оператора switch, class SwitchDemo { public static void main(String args[]) { int i; for(i=0; i<10; i++) switch (i) { case 0: System.out.println ("i is zero"); break; case 1: System.out.println("i is one"); break; case 2: System.out.println("i is two"); break; case 3: System.out.println("i is three"); break; case 4 : System.out.println("i is four"); break; default: System.out.println("i is five or more"); } } }

Результат выполнения данной программы выглядит следующим образом: i is zero i is one i is two i is three i is four i is five or more i is five or more i is five or more i is five or more i is five or more

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

Формально оператор break может отсутствовать, но, как правило, в реальных приложениях он применяется. При выполнении оператора break оператор switch завершает работу и управление передается следующему за ним оператору. Если же в последовательности операторов, связанных с совпадающей константой выбора в одной из ветвей case, не содержится оператор break, то сначала выполняются все операторы в этой ветви, а затем операторы, совпадающие с константой выбора в следующей ветви case. Этот процесс продолжается до тех пор, пока не встретится оператор break или же будет достигнут конец оператора switch.

В качестве упражнения проанализируйте исходный код приведенной ниже програм¬ мы. Сможете ли вы предсказать, как будет выглядеть результат ее выполнения? // Демонстрация оператора switch без оператора break, class NoBreak { > public static void main(String args[]) { int i; for(i=0; i<=5; i++) { switch(i) { case 0: // Далее следует "провал" в ветвях case оператора switch. System.out.println("i is less than one"); case 1: System.out.println("i is less than two"); case 2: System, out .println ("i is less than three")-; case 3: System.out.println("i is less than four"); case 4: System.out.println("i is less than five"); } System.out.println; } } }

Выполнение этой программы дает следующий результат: i is less than one i is less than two i is less than three i is less than four i is less than five i is less than two i is less than three i is less than five i is less than three i is less than four i is less than five i is less than four i is less than five i is less than five

Как

демонстрирует приведенный выше пример, выполнение программы будет продолжено в следующей ветви case в отсутствие оператора break. А в следующем примере кода показано, что в операторе switch могут присутствовать пустые ветви case: switch(i) { case 1: case 2: case 3: System.out.println("i is 1, 2 or 3"); break; case 4: System.out.println("i is 4"); break; }

Если в приведенном выше фрагменте кода переменная i имеет значение 1, 2 или 3, то вызывается первый метод println . А если ее значение равно 4, вызывается второй метод println . Такое расположение нескольких пустых ветвей case подряд нередко используется в тех случаях, когда нескольким ветвям должен соответствовать один и тот же общий код. Вложенные операторы switch

Один оператор switch может быть частью последовательности операторов другого, внешнего оператора switch. И такой оператор switch называется вложенным. Константы выбора внутреннего и внешнего операторов switch могут содержать общие значения, не вызывая никаких конфликтов. Например, следующий фрагмент кода является вполне допустимым: switch(chi) { case 'A1: System.out.println("This A is part of outer switch."); switch(ch2) { case 'A1: System.out.println("This A is part of inner switch"); break; case 'B' : // ... } // конец внутреннего оператора switch break; case 'B': // ...

Пример для опробования 3.1. Начало построения справочной системы Java

В этом проекте предстоит создать простую справочную систему, предоставляющую сведения о синтаксисе управляющих операторов Java. Программа, реализующая эту справочную систему, отображает меню с названиями операторов и ожидает выбора одного из них. Как только пользователь выберет один из пунктов меню, на экран будут выведены сведения о синтаксисе соответствующего оператора. В первой версии данной программы предоставляются сведения только об операторах if и switch. Ав последующих проектах будут добавлены справочные данные об остальных управляющих операторах.

Последовательность действий

Создайте новый файл Help.java.

В начале работы программы отображается следующее меню:Help on: 1. if 2. switch Choose one: Для этой цели потребуется приведенная ниже последовательность операторов.System.out.println("Help on:"); System.out.println(" 1. if"); System.out.println(" 2. switch"); System.out.print("Choose one: ");

Далее программа получает данные о выборе пользователя. С этой целью вызывается метод System.in.read, как показано ниже.choice = (char) System.in.read;

После этого в программе используется оператор switch для отображения сведений о синтаксисе выбранного оператора.switch(choice) { case 111: System.out.println("The if:\n"); System.out.println("if(condition) statement;"); System.out.println("else statement;"); break; case 12’ : System.out.println("The switch:\n"); System.out.println("switch(expression) {"); System.out.println(" case constant:"); System.out.println(" statement sequence"); System.out.println(" break;"); System.out.println (" // ..."); System.out.println("}"); break; default: System.out.print("Selection not found."); } Обратите внимание на то, как в ветви default перехватываются сведения о неправильно сделанном выборе. Так, если пользователь введет значение 3, оно не совпадет ни с одной из констант в ветвях case оператора switch, и тогда управление будет передано коду в ветви default.

Поделиться:
Популярные книги

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Последняя Арена 4

Греков Сергей
4. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 4

Маяк надежды

Кас Маркус
5. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Маяк надежды

Великий перелом

Ланцов Михаил Алексеевич
2. Фрунзе
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Великий перелом

Сопротивляйся мне

Вечная Ольга
3. Порочная власть
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Сопротивляйся мне

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Падение Твердыни

Распопов Дмитрий Викторович
6. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Падение Твердыни

"Дальние горизонты. Дух". Компиляция. Книги 1-25

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Дальние горизонты. Дух. Компиляция. Книги 1-25

Ох уж этот Мин Джин Хо 2

Кронос Александр
2. Мин Джин Хо
Фантастика:
попаданцы
5.00
рейтинг книги
Ох уж этот Мин Джин Хо 2

Энфис 6

Кронос Александр
6. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 6