- Условные конструкции — Основы Java
- Конструкция if
- Конструкция if-else
- Конструкция else if
- Тернарный оператор
- Остались вопросы? Задайте их в разделе «Обсуждение»
- Открыть доступ
- Условные операторы в Java: if-else, switch и «Элвис»
- Условный оператор if
- Условный оператор if-else в Java
- Вложенный if
- «Элвис»
- Условный оператор switch в Java
- Задачи на условные операторы Java
- Язык java условные операторы
- Конструкция if/else
- Конструкция switch
- Тернарная операция
Условные конструкции — Основы Java
Условные конструкции позволяют выполнять разный код, основываясь на логических проверках. Посмотрим на таком типичном примере:
- Человек хочет оплатить покупку с карты
- Если на счету есть деньги, то нужная сумма спишется автоматически
- Если денег нет, то операция будет отклонена
Конструкция if
Для примера напишем метод, который определяет тип переданного предложения. Для начала он будет отличать обычные предложения от вопросительных:
public static String getTypeOfSentence(String sentence) if (sentence.endsWith("?")) return "question"; > return "general"; > App.getTypeOfSentence("Hodor"); // "general" App.getTypeOfSentence("Hodor?"); // "question"
if — конструкция языка, управляющая порядком инструкций. В скобках ей передается логическое выражение, а затем описывается блок кода в фигурных скобках. Этот блок кода будет выполнен, только если условие выполняется.
Если условие не выполняется, то блок кода в фигурных скобках пропускается, и метод продолжает свое выполнение дальше. В нашем случае следующая строчка кода — return «general»; — заставит метод вернуть строку и завершиться.
Конструкция if-else
Условная конструкция if имеет несколько разновидностей. Одна разновидность включает в себя блок, который выполняется, если условие ложно:
if (x > 5) // Если условие true > else // Если условие false >
Такая структура может понадобиться при начальной инициализации значения. В примере ниже проверяется наличие email . Если он отсутствует, то устанавливаем значение по умолчанию, если его передали, то выполняем нормализацию:
// Здесь приходит email if (email.equals("")) // Если email пустой, то ставим дефолт email = "support@hexlet.io"; > else // Иначе выполняем нормализацию email = email.trim().toLowerCase(); > // Здесь используем эту почту
Если ветка if содержит return , то else становится не нужен — его можно просто опустить:
if (/* условие */) return /* какое-то значение */; > // Продолжаем что-то делать, потому что else не нужен
Конструкция else if
В самой полной версии конструкция if содержит не только ветку else , но и другие условные проверки с помощью else if . Такой вариант используется при большом количестве проверок, которые взаимоисключают друг друга:
if (/* что-то */) > else if (/* другая проверка */) > else if (/* другая проверка */) > else >
Здесь стоит обратить внимание на два момента:
Напишем для примера расширенный метод определяющий тип предложения. Он распознает три вида предложений:
App.getTypeOfSentence("Who?"); // "Sentence is question" App.getTypeOfSentence("No"); // "Sentence is general" App.getTypeOfSentence("No!"); // "Sentence is exclamation" public static String getTypeOfSentence(String sentence) var sentenceType = ""; if (sentence.endsWith("?")) sentenceType = "question"; > else if (sentence.endsWith("!")) sentenceType = "exclamation"; > else sentenceType = "general"; > return "Sentence is " + sentenceType; >
Теперь все условия выстроены в единую конструкцию. Оператор else if — это «если не выполнено предыдущее условие, но выполнено текущее». Получается такая схема:
- Если последний символ ? , то «question»
- Иначе, если последний символ ! , то «exclamation»
- Иначе «general»
В итоге выполнится только один из блоков кода, относящихся ко всей конструкции if .
Тернарный оператор
Посмотрите на определение метода, который возвращает модуль переданного числа:
// Если больше нуля, то выдаем само число. Если меньше, то убираем знак public static int abs(int number) if (number >= 0) return number; > return -number; > App.abs(10); // 10 App.abs(-10); // 10
В Java существует конструкция, которая по своему действию аналогична конструкции if-else, но при этом является выражением. Она называется тернарный оператор.
Тернарный оператор — единственный в своем роде оператор, требующий три операнда. Он помогает писать меньше кода для простых условных выражений. Наш пример выше с тернарным оператором превращается в три строки кода:
public static int abs(int number) return number >= 0 ? number : -number; >
Общий шаблон выглядит так:
predicate> ? expression on true> : expression on false>
То есть сначала мы записываем логическое выражение, а дальше два разных варианта поведения:
- Если условие истинно, выполняет вариант до двоеточия
- Если условие ложно, выполняет вариант после двоеточия
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Об обучении на Хекслете
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Условные операторы в Java: if-else, switch и «Элвис»
Чтобы эффективно работать с условными операторами на языке Java, необходимо знать, какими они бывают и для каких сценариев подходят. Обсудим это и некоторые нововведения из Java 13.
Условный оператор if
Оператор if позволяет задать условие, в соответствии с которым дальнейшая часть программы может быть выполнена. Это основной оператор выбора, который используется в языке Java. Он начинается с ключевого слова if и продолжается булевым выражением — условием, заключённым в круглые скобки.
В качестве примера рассмотрим простое равенство, при истинности которого программа выведет результат:
Поскольку условие истинно, в выводе программы мы увидим:
Условный оператор if-else в Java
else в языке Java означает «в ином случае». То есть если условие if не является истинным, выводится то, что в блоке 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 , а все остальные блоки игнорируются.
Вложенный if
Кроме того, может производиться проверка сразу на несколько условий, в соответствии с которыми выполняются разные действия. Представим, что у нас есть две переменные, на основе которых можно создать два условия:
int a = 20; int b = 5; if(a == 20) < System.out.println("a = 20"); if(b == 5)< System.out.println("b = 5"); >>
В результате программа заходит в оба блока и делает два вывода, потому как оба условия истинны.
«Элвис»
По сути, это сокращенный вариант if-else . Элвисом его прозвали за конструкцию, которая напоминает причёску короля рок-н-ролла — ?: . Данный оператор также принято называть тернарным. Он требует три операнда и позволяет писать меньше кода для простых условий.
Само выражение будет выглядеть следующим образом:
int a = 20; int b = 5; String answer = (a > b) ? "Условие верно" : "Условие ошибочно"; System.out.println(answer);
Как видите, с помощью тернарного оператора можно существенно сократить код. Но не стоит им злоупотреблять: для сложных условий используйте другие операторы выбора Java, дабы не ухудшать читаемость кода.
Условный оператор switch в Java
Оператор выбора switch позволяет сравнивать переменную как с одним, так и с несколькими значениями. Общая форма написания выглядит следующим образом:
Рассмотрим распространённый пример с днями недели:
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
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 :
Пишите свои ответы к задачам по условным операторам в 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 , так как позволяет обработать сразу несколько условий:
После ключевого слова 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 , то третий. Например: