2.3. Оператор switch

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

switch (выражение) { case значение 1:

break;

case значение 2:

break;

case значение n:

break;

default:

}

Результатом вычисления «выражения» может быть значение любого простого типа, при этом каждое из значений, указанных в операторах case, должно быть совместимо по типу с выражением в операторе switch. Все эти значения должны быть уникальными литералами. Если же вы укажете в двух операторах case одинаковые значения, тогда будет ошибка.

Если же значению выражения не соответствует ни один из операторов case, управление передается коду, расположенному после ключевого слова default. Отметим, что оператор default необязателен. В случае, когда ни один из операторов case не соответствует значению выражения и в switch отсутствует оператор default, выполнение программы продолжается с оператора, следующего за оператором switch.

Внутри оператора switch (а также внутри циклических конструкций) break без метки приводит к передаче управления на код, стоящий после оператора switch. Если break отсутствует, после текущего раздела case будет выполняться следующий. Иногда бывает удобно иметь в операторе switch несколько смежных разделов case, не разделенных оператором break.

class SwitchSeason {

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("Anpenb - это " + season + ".");

} }

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

class WordCount {

// Задаем текстовую строку

static String text = "Основы программирования\п" +

"на языке Java\n" +

"для начинающих\п" +

"разработчиков\п"; //Получаем длину строки static int len = text.length(); public static void main(String args[]) { boolean inWord = false;

int numChars = 0; //переменная для хранения количества символов в тексте int numWords = 0; //переменная для хранения количества слов в тексте int nurnLines = 0; //переменная для хранения количества строк в тексте //Организуем цикл по длине текстовой строки for(inti=0;i<len; i++) {

char с = textxharAt(i); //Преобразуем элемент текстовой строки в символ numChars++; //Увеличиваем на 1 счетчик символов

switch (с) { //Анализируем символы в текстовой строке

case *\n': numLines++; // Если символ перевода строки, то увеличиваем

//счетчик строк на 1

case *\t': // Тоже самое

case'': if (inWord) { //Если пробел увеличиваем счетчик слов на 1 numWords++; inWord = false;

}

break; default: inWord = true;

}

}

System.out.println("\t" + nurnLines +"\t" + numWords + "\t" + numChars); //Выводим на консоль количество строк, слов и символов в текстовой строке

} }