Условные операторы в Java: if-else, switch и «Элвис»
Прокатимся по ключевым операторам выбора в языке программирования Джава, начиная if-else и заканчивая обновлённым switch в Java 12.
Чтобы эффективно работать с условными операторами на языке Java, необходимо знать, какими они бывают и для каких сценариев подходят. Обсудим это и некоторые нововведения из Java 13.
Условный оператор if
Оператор if позволяет задать условие, в соответствии с которым дальнейшая часть программы может быть выполнена. Это основной оператор выбора, который используется в языке Java. Он начинается с ключевого слова if и продолжается булевым выражением — условием, заключённым в круглые скобки.
В качестве примера рассмотрим простое равенство, при истинности которого программа выведет результат:
if(2 * 2 == 4)
Поскольку условие истинно, в выводе программы мы увидим:
Программа выполняется
Условный оператор if-else в Java
else в языке Java означает «в ином случае». То есть если условие if не является истинным, выводится то, что в блоке else :
if(2 * 2 == 5) < System.out.println("Программа выполняется"); >else
Условие ошибочно
Это же сработает и без ключевого слова else , но чтобы код был читабельным и логичным, не следует пренебрегать else , как это сделано в следующем примере:
if(2 * 2 == 5) < System.out.println("Программа выполняется"); >System.out.println("Условие ошибочно");
А теперь давайте создадим несколько условий с использованием конструкции if-else . Выглядит это таким образом:
int a = 20; if(a == 10) < System.out.println("a = 10"); >else if(a == 15) < System.out.println("a = 15"); >else if(a == 20) < System.out.println("a = 20"); >else
a = 20
Как видим, только третье условие истинно, поэтому выводится именно a = 20 , а все остальные блоки игнорируются.
Вложенный if
Кроме того, может производиться проверка сразу на несколько условий, в соответствии с которыми выполняются разные действия. Представим, что у нас есть две переменные, на основе которых можно создать два условия:
int a = 20; int b = 5; if(a == 20) < System.out.println("a = 20"); if(b == 5)< System.out.println("b = 5"); >>
a = 20 b = 5
В результате программа заходит в оба блока и делает два вывода, потому как оба условия истинны.
«Элвис»
По сути, это сокращенный вариант if-else . Элвисом его прозвали за конструкцию, которая напоминает причёску короля рок-н-ролла — ?: . Данный оператор также принято называть тернарным. Он требует три операнда и позволяет писать меньше кода для простых условий.
Само выражение будет выглядеть следующим образом:
int a = 20; int b = 5; String answer = (a > b) ? "Условие верно" : "Условие ошибочно"; System.out.println(answer);
Условие верно
Как видите, с помощью тернарного оператора можно существенно сократить код. Но не стоит им злоупотреблять: для сложных условий используйте другие операторы выбора Java, дабы не ухудшать читаемость кода.
Условный оператор switch в Java
Оператор выбора switch позволяет сравнивать переменную как с одним, так и с несколькими значениями. Общая форма написания выглядит следующим образом:
switch(выражение) < case значение1: // Блок кода 1 break; case значение2: // Блок кода 2 break; case значениеN: // Блок кода N break; default : // Блок кода для default >
Рассмотрим распространённый пример с днями недели:
public class Main < //Создадим простое перечисление дней недели private static enum DayOTheWeek< MON, TUE, WED, THU, FRI, SAT, SUN >public static void main(String[] args) < //Выбираем понедельник (MON) var dayOfTheWeek= DayOTheWeek.MON; switch (dayOfTheWeek)< case MON: System.out.println("Понедельник"); break; case TUE: System.out.println("Вторник"); break; default: System.out.println("Другой день недели"); >> >
Понедельник
break при этом прерывает процесс проверки, поскольку соответствие условия уже найдено. Но начиная с Java 13, вместо break в условном операторе switch правильнее использовать yield — ключевое слово, которое не только завершает проверку, но и возвращает значение блока.
Кроме того, с 12 версии Java конструкция switch-case также претерпела некоторые изменения. Если вы используете в работе IntelliJ IDEA, данная среда разработки сама подскажет, как оптимизировать switch-case под новые версии.
Вот преобразованный код из нашего примера с некоторыми изменениями:
public class Main < private static enum DayOTheWeek< MON, TUE, WED, THU, FRI, SAT, SUN >public static void main(String[] args) < //В этот раз выберем вторник var dayOfTheWeek= DayOTheWeek.TUE; String result = switch (dayOfTheWeek)< case MON ->"Понедельник"; case TUE, WED, THU, FRI -> < yield "Любой будний день, кроме понедельника."; >default -> "Выходной день"; >; System.out.println(result); > >
Любой будний день, кроме понедельника.
Задачи на условные операторы Java
Определите, что выведут в консоль следующие примеры, без проверки в компиляторе.
1. В переменной min лежит число от 0 до 59. Определите в какую четверть часа попадает это число (в первую, вторую, третью или четвертую):
int min = 10; if(min >= 0 && min else if(min >= 15 && min else if(min >= 31 && min else
7 практических заданий с собеседования на позицию Junior Java Developer
2. Что выведет следующий код:
int month = 3; String monthString; switch (month) < case 1: monthString = "Январь"; break; case 2: monthString = "Февраль"; break; case 3: monthString = "Март"; break; case 4: monthString = "Апрель"; break; case 5: monthString = "Май"; break; case 6: monthString = "Июнь"; break; case 7: monthString = "Июль"; break; case 8: monthString = "Август"; break; case 9: monthString = "Сентябрь"; break; case 10: monthString = "Октябрь"; break; case 11: monthString = "Ноябрь"; break; case 12: monthString = "Декабрь"; break; default: monthString = "Не знаем такого"; break; >System.out.println(monthString);
3. Какое значение будет присвоено переменной k :
int i = -10 * -1 + (-2); int k = i < 0 ? -i : i; System.out.println(k);
Пишите свои ответы к задачам по условным операторам в Java.
If-else в Java
В Java оператор ветвления if-else имеет Си-подобный синтаксис: условное выражение заключается в круглые скобки, тело ветки – в фигурные.
if (логич_выражение) < выражение1; выражение2; … >else
Если тело состоит из одного выражения, фигурные скобки можно не использовать.
if (логич_выражение) выражение1; else выражение2;
В случае множественного ветвления обычно используют вложение последующих веток if во внешние для них else с поднятием этого if к строке else.
if (…) < … >else if (…) < … >else if (…) < … >else
Простыми логическими операторами являются ==, !=, , >=.
Логические операторы И, ИЛИ, логическое НЕ записываются соответственно &&, ||, !. В Java эти операторы применимы только к булевому типу данных, то есть нельзя писать, например, ! var или a < 3 || var , если var – целое или любой другой отличный от boolean тип. То же самое касается циклов: while ( true ) < >будет работать, while ( 1 ) < >– нет.
При сравнении примитивных типов сравниваются их значения. Так в следующем коде ветка if выполнится:
int a = 3; int b = 3; if (a == b) System.out.println(1); >
В случае ссылочных типов сравниваются ссылки. Чтобы быть равными, они должны указывать на один и тот же объект.
package info.younglinux.java; public class Logic public static void main(String[] args) Message a = new Message("Hello"); Message b = new Message("Hello"); Message c = b; if (a == b) System.out.println("a == b"); > if (b == c) System.out.println("b == c"); > > > class Message private String m = ""; Message(String str) this.m = str; > String getMessage() return this.m; > >
В приведенной программе на экран будет выведено только b == c, так как обе переменные указывают на один и тот же объект. В то время как a и b – разные объекты.
В Java есть сокращенный вариант условного оператора для случая, когда есть две ветки – if и else, каждая включает только одно выражение, а результат выражений обоих веток может быть присвоен переменной одного типа. Такой оператор называется тернарным (ternary – тройной).
import java.util.Scanner; public class Ternary public static void main(String[] args) Scanner scan = new Scanner(System.in); int a = scan.nextInt(); int b = a > 10 ? a : a + 10; System.out.println(b); > >
В выражении a > 10 ? a : a + 10 ; проверяется условие, стоящее до знака вопроса. Если оно истинно, то переменной b присваивается результат выражения, находящегося между знаками вопроса и двоеточия. Если условие ложно, то присваивается результат выражения, находящегося после двоеточия.
X Скрыть Наверх
Программирование на Java. Курс
Что такое оператор условия java
Одним из фундаментальных элементов многих языков программирования являются условные конструкции . Данные конструкции позволяют направить работу программы по одному из путей в зависимости от определенных условий.
В языке Java используются следующие условные конструкции: if..else и switch..case
Конструкция if/else
Выражение if/else проверяет истинность некоторого условия и в зависимости от результатов проверки выполняет определенный код:
int num1 = 6; int num2 = 4; if(num1>num2)
После ключевого слова if ставится условие. И если это условие выполняется, то срабатывает код, который помещен в далее в блоке if после фигурных скобок. В качестве условий выступает операция сравнения двух чисел.
Так как, в данном случае первое число больше второго, то выражение num1 > num2 истинно и возвращает значение true . Следовательно, управление переходит в блок кода после фигурных скобок и начинает выполнять содержащиеся там инструкции, а конкретно метод System.out.println("Первое число больше второго"); . Если бы первое число оказалось бы меньше второго или равно ему, то инструкции в блоке if не выполнялись бы.
Но что, если мы захотим, чтобы при несоблюдении условия также выполнялись какие-либо действия? В этом случае мы можем добавить блок else :
int num1 = 6; int num2 = 4; if(num1>num2) < System.out.println("Первое число больше второго"); >else
Но при сравнении чисел мы можем насчитать три состояния: первое число больше второго, первое число меньше второго и числа равны. С помощью выражения else if , мы можем обрабатывать дополнительные условия:
int num1 = 6; int num2 = 8; if(num1>num2) < System.out.println("Первое число больше второго"); >else if(num1
Также мы можем соединить сразу несколько условий, используя логические операторы:
int num1 = 8; int num2 = 6; if(num1 > num2 && num1>7)
Здесь блок if будет выполняться, если num1 > num2 равно true и одновременно num1>7 равно true .
Конструкция switch
Конструкция switch/case аналогична конструкции if/else , так как позволяет обработать сразу несколько условий:
int num = 8; switch(num)
После ключевого слова switch в скобках идет сравниваемое выражение. Значение этого выражения последовательно сравнивается со значениями, помещенными после операторов сase . И если совпадение найдено, то будет выполняет соответствующий блок сase .
В конце блока сase ставится оператор break , чтобы избежать выполнения других блоков. Например, если бы убрали оператор break в следующем случае:
case 8: System.out.println("число равно 8"); num++; case 9: System.out.println("число равно 9"); break;
то выполнился бы блок case 8 , (поскольку переменная num равна 8). Но так как в этом блоке оператор break отсутствует, то начал бы выполняться блок case 9 .
Если мы хотим также обработать ситуацию, когда совпадения не будет найдено, то можно добавить блок default , как в примере выше. Хотя блок default необязателен.
Также мы можем определить одно действие сразу для нескольких блоков case подряд:
int num = 3; int output = 0; switch(num) < case 1: output = 3; break; case 2: case 3: case 4: output = 6; break; case 5: output = 12; break; default: output = 24; >System.out.println(output);
Тернарная операция
Тернарную операция имеет следующий синтаксис: [первый операнд - условие] ? [второй операнд] : [третий операнд] . Таким образом, в этой операции участвуют сразу три операнда. В зависимости от условия тернарная операция возвращает второй или третий операнд: если условие равно true , то возвращается второй операнд; если условие равно false , то третий. Например:
int x=3; int y=2; int z = x
- Вопросы для самопроверки
- Упражнения
#6 – Условные конструкции (if-else, switch-case)

Условные конструкции позволяют выполнить проверку и в зависимости от результата произвести выполнение определенного участка кода. За урок мы научимся использовать конструкцию if-else, а также switch-case в языке Java.
Видеоурок
Условные операторы очень важны, ведь они позволяют выполнять разный код в зависимости от исхода условия. В языке Java существует три конструкции позволяющих осуществлять проверку.
Конструкция if - else
За счёт if else можно проверить одно или несколько условий и в случае их успешной проверки будет выполнен один, иначе другой.
int a = 2, b = 10; if (a == b) < // Если a будет равным b, тогда будет выполнен код // Здесь код который будет выполнен // Если все одна строка кода, то фигурные скобки <>// можно не ставить > else if (a else < // Этот код сработает, если другие условия не будет выполнено >
Вы можете прописать структуру лишь с одним условием if , а можете дописать в неё сколько-угодно вложенных условий else if .
Внутри каждого из условий можно прописывать другие конструкции if else, что будут проверять новые выражения.
Если необходимо проверить несколько условий в одном операторе, то можно воспользоваться логическим «и» или же логическим «или»:
if (a != b && a > b) < // Код будет выполнен, если и первое, и второе условие // окажутся верными >if (a < b || a == b) < // Код будет выполнен, если или первое, или второе условие // окажется верным >
Конструкция switch
Конструкция case обладает более удобным форматом для проверки множественных условий на совпадение значения. В конструкцию записывается переменная, что проверяется, а также значения на которые происходит проверка.
int x = 23; switch (x) < // Проверяем переменную x case 1: // Если переменная будет равна 1, то здесь сработает код // Может быть множество строк, а не только одна System.out.print ("Переменная равна 1"); break; // Указываем конец для кода для этой проверки case 56: // Если переменная будет равна 56, то здесь сработает код // Может быть множество строк, а не только одна System.out.print ("Переменная равна 56"); break; // Указываем конец для кода для этой проверки // По аналогии таких проверок может быть множество // Также можно добавить проверку, которая сработает в случае // если все остальные проверки не сработают default: System.out.print ("Что-то другое"); break; // Можно и не ставить, так как это последние условие >
Тернарная операция
Это сокращенная форма if else . Записывается следующим образом:
int x = 3, a = 12; int res = x < a ? (x + a) : (x - a); System.out.println(res);
Мы проверяем, если "x" будет меньше за "a", то мы в переменную res устанавливаем их сумму, иначе - их разницу.
Весь код будет доступен после подписки на проект!
Задание к уроку
Оператор switch case
Создайте условный оператор switch case для проверки числовой переменной.
- Если переменная равна 3 - выведите в консоль надпись "Три";
- Переменная равна 7 - выведите надпись "Семь";
- Для всего остального выведите надпись "Что-то другое".
Посмотреть ответ
Вот код решения подобной задачи:
int a = 11; switch (a)
Получить остальные домашние задания можно после подписки на проект
Большое задание по курсу
Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца
Также стоит посмотреть
Комментарии (8)
Michael 26 июля 2023 в 23:14
Добрый день! Мне не очень понятно почему автор ролика используют тип данных "int" вместо "char". То есть "int a = 15, b = 10", так как часто используется для работы с символами.
Bruh 30 ноября 2023 в 10:07
Тебе в ролике объяснили что в калькуляторе если не будет этой строчики то все значения которые ты ввел в switch case они игнорятся и срабатывает default который ты прописал в конце switch case. Это происходит потому что переменной действие значения не имее и система обрабатыет пустоту а эту пустоту ты в switch case конечно же не прописывал и о Чудо Ошибка. Поэтому нужна эта строчка. Надеюсь помог и объяснил!
Sponge 18 декабря 2022 в 14:38
А почему сначала нельзя ввести первое число, затем операцию и второе число?
Gantz 14 ноября 2022 в 18:45
Извините, но ответ на задание кажется каким-то неполным.
Если я копирую код, то при исполнении программы сразу выскакивает default, но если дополнить код строкой
int x = scan.nextInt(); то всё срабатывает
User 09 ноября 2022 в 19:07
Объясните, пожалуйста, в Задании к уроку первую строку: int a = 11; - что это? Почему 11?
Gantz 13 ноября 2022 в 21:42
значит, что это любое число, которое не равно 3 и 7. могло быть хоть 100500. Для того, чтобы вывести "Что-то другое" Если бы поставили int а = 3, то первый же кейс подтвердил бы, что число == 3. Надеюсь понятно объяснил..я так это понял
Сергей 23 октября 2022 в 18:34
Свой калькулятор
//здесь мы объявляем переменную и разве знчение не получаем от пользователя
String action = scanner.nextLine();
// зачем нам эта строка?
action = scanner.nextLine();
Gantz 14 ноября 2022 в 18:47
Я тоже ничего не понял из этого блока
itProger 14 ноября 2022 в 18:56
В Джава предпоследние получение данных от пользователя всегда засчитываем еще как значение для последнего получения. Чтобы действительно получить данные от пользователя и указать их в качестве значение для action, то необходимо выполнить доволи глупую вещь – получить данные два раза scanner.nextLine() 🙂
Bruh 30 ноября 2023 в 10:08
Ребята в ролик гляньте эту часть про switch case и поймете что там будет не коректно работать калькулятор.
артем 24 августа 2022 в 21:06
что делать если даже условие не правильное все равно выходит надпись (скобки поставил)?
Валентина 01 июня 2022 в 22:38
Скажите как оплатить подписку из Белоруссии, почтовый ящик [email protected]
itProger 02 июня 2022 в 08:12
Здравствуйте!
Оплата подписки здесь: https://itproger.com/reg. Если возникнут сложности, то напишите консультанту на странице с покупкой.
Dima 16 мая 2022 в 20:34
Очень полезный и крутой курс, очень понятно всё объяснили + практика даёт возможность очень быстро и хорошо всё выучить!
Огромное спасибо!
itProger 16 мая 2022 в 20:49