Если вашей Java-программе необходимо сделать выбор между двумя или тремя действиями, если тогда еще заявление будет достаточно. Однако если тогда еще утверждение начинает ощущаться обременительным, когда программе может потребоваться сделать ряд действий. Есть только так много еще... если операторы, которые вы хотите добавить до того, как код начнет выглядеть неопрятно. Когда требуется решение по нескольким параметрам, используйте оператор switch.
Заявление о переключении
Оператор switch позволяет программе сравнивать значение выражение к списку альтернативных значений. Например, представьте, что у вас есть выпадающее меню, которое содержит цифры от 1 до 4. В зависимости от того, какое число выбрано, вы хотите, чтобы ваша программа делала что-то другое:
// скажем, пользователь выбирает номер 4
int menuChoice = 4;
переключатель (menuChoice)
{
Дело 1:
JOptionPane.showMessageDialog (null, «Вы выбрали номер 1»);
перемена;
случай 2:
JOptionPane.showMessageDialog (null, «Вы выбрали номер 2»);
перемена;
случай 3:
JOptionPane.showMessageDialog (null, «Вы выбрали номер 3»);
перемена;
// Эта опция выбрана, потому что значение 4 соответствует значению
// переменная menuChoise
case 4: JOptionPane.showMessageDialog (null, «Вы выбрали номер 4.»); перемена;
дефолт:
JOptionPane.showMessageDialog (null, «Что-то пошло не так!»);
перемена;
}
Если вы посмотрите на синтаксис оператора switch, вы должны заметить несколько вещей:
1. Переменная, содержащая значение, с которым необходимо сравнить, помещается вверху, внутри скобок.
2. Каждый альтернативный вариант начинается с метки регистра. Значение для сравнения с верхом переменная Далее следует двоеточие. Например, case 1: это метка case, за которой следует значение 1 - это может быть также просто case 123: или case -9:. Вы можете иметь столько альтернативных вариантов, сколько вам нужно.
3. Если вы посмотрите на вышеприведенный синтаксис, будет выделен четвертый альтернативный вариант - метка case, код, который он выполняет (т.е. JOptionPane) и оператор break. Оператор break сигнализирует об окончании кода, который необходимо выполнить. Если вы посмотрите, вы увидите, что каждый альтернативный вариант заканчивается оператором break. Очень важно помнить, чтобы вставить заявление о перерыве. Рассмотрим следующий код:
// скажем, пользователь выбирает номер 1
int menuChoice = 1;
переключатель (menuChoice)
Дело 1:
JOptionPane.showMessageDialog (null, «Вы выбрали номер 1»);
случай 2:
JOptionPane.showMessageDialog (null, «Вы выбрали номер 2»);
перемена;
случай 3:
JOptionPane.showMessageDialog (null, «Вы выбрали номер 3»);
перемена;
дело 4:
JOptionPane.showMessageDialog (null, «Вы выбрали номер 4.»);
перемена;
дефолт:
JOptionPane.showMessageDialog (null, «Что-то пошло не так!»);
перемена;
}
То, что вы ожидаете, это увидеть чат говоря «Вы выбрали номер 1», но поскольку нет оператора break, соответствующего первой метке регистра, также выполняется код во второй метке регистра. Это означает, что появится следующее диалоговое окно с надписью «Вы выбрали номер 2».
4. Внизу оператора switch есть метка по умолчанию. Это похоже на страховочную сеть, если ни одно из значений меток кейса не совпадает со сравниваемым значением. Очень полезно предоставить способ выполнения кода, когда не выбран ни один из желаемых параметров.
Если вы всегда ожидаете, что будет выбран один из других вариантов, вы можете пропустить метку по умолчанию, но ставить ее в конце каждого оператора switch - хорошая привычка. Может показаться маловероятным, что он когда-либо будет использоваться, но ошибки могут проникнуть в код, и это может помочь отловить ошибку.
С JDK 7
Одним из изменений в синтаксисе Java с выпуском JDK 7 является возможность использования Струны в заявлениях переключателя. Возможность сравнения значений String в операторе switch может быть очень полезной:
String name = "Bob";
switch (name.toLowerCase ())
{
дело "джо":
JOptionPane.showMessageDialog (null, "Доброе утро, Джо!");
перемена;
дело "майкл":
JOptionPane.showMessageDialog (null, "Как дела, Майкл?");
перемена;
дело "боб":
JOptionPane.showMessageDialog (null, «Боб, мой старый друг!»);
перемена;
Дело "Билли":
JOptionPane.showMessageDialog (null, «После обеда, Билли, как дети?»);
перемена;
дефолт:
JOptionPane.showMessageDialog (null, «Рад знакомству, Джон Доу.»);
перемена;
}
При сравнении двух строковых значений может быть намного проще, если вы убедитесь, что они все в одном и том же случае. Использование метода .toLowerCase означает, что все значения метки регистра могут быть в в нижнем регистре.
Что нужно помнить о заявлении о смене
• Тип сравниваемой переменной должен быть типом char, byte, short, int, Character, Byte, Short, Integer, String или enum.
• Значение рядом с меткой регистра не может быть переменной. Это должно быть постоянное выражение (например, литерал int, символ литерал).
• Значения константных выражений для всех меток регистра должны быть разными. Следующее может привести к ошибке во время компиляции:
переключатель (menuChoice)
{
дело 323:
JOptionPane.showMessageDialog (null, «Вы выбрали вариант 1.»);
перемена;
дело 323:
JOptionPane.showMessageDialog (null, «Вы выбрали вариант 2.»);
перемена;
• В операторе switch может быть только одна метка по умолчанию.
• При использовании объекта для оператора switch (например, String, Integer, Character) убедитесь, что он не равен нулю. Пустой объект приведет к ошибке времени выполнения при выполнении оператора switch.