switch в Java
Сохраните целое число 2 под именем choice. Постройте switch со списками case 1, case 2 и case 3 — у каждого свой println — плюс default. Когда вы скомпилируете и запустите, экран должен показать mid — одну строку — потому что совпал case 2. Этому и учит страница: одно значение, несколько фиксированных меток, один выбранный путь.
Одно значение, несколько фиксированных меток
Создайте небольшой файл программы с именем Dial.java. public class в первой строке должен совпадать с именем файла: public class Dial. Не оставляйте в этом файле старое имя класса Gate или Mint; компилятор ждёт, что имя класса и имя файла совпадут.
Внутри main перед switch сохраните целое число:
int choice = 2;
Эта строка ничего не печатает. Она только даёт имени choice значение 2. choice начинается с маленькой c. Вокруг 2 нет кавычек. Точка с запятой заканчивает строку хранения. После этого идёт сам switch:
switch (choice) {
case 1:
System.out.println("low");
break;
case 2:
System.out.println("mid");
break;
case 3:
System.out.println("high");
break;
default:
System.out.println("none");
break;
}
Слово switch пишется маленькими буквами. Внутри скобок стоит имя choice — значение, которое Java сравнит с каждой меткой case. Каждая строка case заканчивается двоеточием, а не точкой с запятой. Под case 2 стоит System.out.println("mid"); затем слово break и точка с запятой. Когда choice хранит 2, Java входит в case 2, печатает mid, доходит до break и выходит из всего switch. case 3 и default в этом запуске не выполняются. Сохраните файл перед компиляцией.
Программа, которая печатает mid
Это версия, которую вы компилируете первой. choice равен 2, поэтому совпавшая метка — case 2.
public class Dial {
public static void main(String[] args) {
int choice = 2;
switch (choice) {
case 1:
System.out.println("low");
break;
case 2:
System.out.println("mid");
break;
case 3:
System.out.println("high");
break;
default:
System.out.println("none");
break;
}
}
}
Из папки, где лежит Dial.java, выполните javac Dial.java. Когда фигурные скобки, круглые скобки и двоеточия совпадают, javac не пишет ни одной своей строки. Затем выполните java Dial — не java Dial.java. Окончание .java у второй команды уберите. Те же две команды работают и в Windows, и в macOS; эта страница не требует другого написания оболочки ни для одной из систем. Программа должна напечатать mid и остановиться. Она не ждёт, пока вы что-то наберёте. Если терминал ждёт ввода с клавиатуры, в файле ещё остался вызов nextLine из старого упражнения. Удалите этот вызов и оставьте int вместе со switch выше. Из‑за неверной строки на экране новый JDK ставить не нужно.
Почему mid, а не low или high? Потому что значение в скобках было 2, и совпавшая метка — case 2. В этом запуске Java не печатает саму цифру 2, пока вы специально не напишете println для этой цифры. Она печатает то, что выполняет println под совпавшим case. Круглые скобки держат сравниваемое значение. Каждая метка case здесь — фиксированное целое число. break заканчивает switch, чтобы следующие case молчали. default ждёт значений, которые не совпали ни с одним case — пока choice равен 2, default не используется.
Когда ни один case не совпал
Измените только сохранённое значение:
int choice = 9;
Структуру switch оставьте как есть. Теперь ни case 1, ни case 2, ни case 3 не совпадают. Java переходит к default и выполняет System.out.println("none");. На экране должна появиться одна строка: none.
public class Dial {
public static void main(String[] args) {
int choice = 9;
switch (choice) {
case 1:
System.out.println("low");
break;
case 2:
System.out.println("mid");
break;
case 3:
System.out.println("high");
break;
default:
System.out.println("none");
break;
}
}
}
Скомпилируйте и запустите снова: javac Dial.java, затем java Dial. Вы должны увидеть none. Строки case вы не переписывали — изменилось только значение под choice. После того как вы увидели none, можете вернуть int choice = 2;, чтобы снова получить первое демо. Обе версии — корректный Java. Они учат одну и ту же форму switch: один раз с совпавшим case, один раз с default.
Прочитайте запуск default ещё раз по порядку. choice хранит 9. Начинается switch (choice). case 1 не совпадает. case 2 не совпадает. case 3 не совпадает. Управление продолжается на default. Выполняется println("none"). На экране одна строка. Сама цифра 9 не появляется, пока вы специально её не напечатаете.
break останавливает следующие case
break — не украшение. Без него Java после совпадения может продолжить выполнять строки следующего case. Такое «проваливание» (fall-through) удивляет начинающих. Вот короткое демо, которое намеренно забывает break после case 2 — держите его в отдельной попытке или внимательно прочитайте, прежде чем компилировать как основной файл урока:
public class Dial {
public static void main(String[] args) {
int choice = 2;
switch (choice) {
case 1:
System.out.println("low");
break;
case 2:
System.out.println("mid");
case 3:
System.out.println("high");
break;
default:
System.out.println("none");
break;
}
}
}
При choice равном 2 и без break под case 2 экран может показать mid в одной строке и high в следующей. case 2 совпал, напечатал mid, затем провалился в case 3 и напечатал high. Первые учебные демо держат break под каждым case, чтобы каждый путь писал ровно одну строку. Верните break, прежде чем снова считать Dial.java сохранённым файлом урока.
Правила, которые держат метки ясными
Круглые скобки вокруг переключаемого значения обязательны. Написание switch choice { … } без скобок заставляет javac завершиться с ошибкой. Каждая метка case на этой странице — целочисленная константа: case 1:, case 2:, case 3:. После метки идёт двоеточие. Написание case 2; с точкой с запятой вместо двоеточия — не та форма, которую компилирует этот урок. У default после слова нет значения — только default: и затем строки для «ничего не совпало».
switch — не тот же инструмент, что if. if (ready) задаёт вопрос true или false. switch (choice) сопоставляет одно значение со списком фиксированных меток. Не пишите switch (ready) с boolean и не ждите той же формы урока, что у Gate.java. Демо этой страницы остаются на int с именем choice и целочисленных метках case. Сравнения вроде if (score > 10) по-прежнему относятся к if, когда нужен диапазон; switch силён, когда значения дискретны и известны заранее.
Частая путаница — печатать сам синтаксис: System.out.println("switch (choice)");. Это пишет символы switch (choice). Оно не выбирает case. Другая путаница — оставить в том же main демо if / else со страницы Gate и удивляться, почему экран показывает pass вместо mid. main этой сессии должен держать только int и switch.
📊 choice и экран
| choice | Экран |
|---|---|
| 1 | low |
| 2 | mid |
| 3 | high |
| 9 | none |
Используйте таблицу как проверку после запуска, а не вместо него. choice 2 в первом демо печатает mid. choice 9 во втором демо печатает none. choice 1 печатает low. choice 3 печатает high. Если при choice 2 появляются и mid, и high, под case 2 отсутствует break — исправьте break, а не переустанавливайте Java.
Что вы уже можете
Вы можете сохранить целое число, поставить его в switch (…), и дать каждому фиксированному значению свой case с println и break. Когда case совпадает, выполняется эта строка; когда ничего не совпало, выполняется default. Следующая страница — for: там тот же блок строк может выполняться снова и снова, пока меняется счётчик.
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху