Иногда программа действует “в лоб” – просто выполняя операции друг за другом. Но гораздо чаще нужны программы, которые умеют делать проверки. Такие программы выбирают, как себя повести, в зависимости от условий: состояние внешней среды, выбор пользователя, сохранённые значения переменных и так далее. Условия в Java имеют три реализации, которые мы рассмотрим в этой статье: if-then-else оператор, тернарный оператор (ternary operator) и switch-case конструкция.
Содержание:

Операторы сравнения
Перед тем, как начать всюду использовать условия, нужно осознать, как именно сравнивать, и что сравнивать между собой.
Операторы сравнения в Java, да в и других языках программирования, используются для сравнения значений переменных (или прямых значений, например, просто 4) и возвращают логическое значение – true (истина) или false (ложь). Результат зависит от того, выполняется указанное условие или нет. Например, сейчас 1970 год? Ответ – false (ложь). В коде сравнение можно изобразить примерно так:
1 |
currentYear == 1970 |
Это непосредственно сравнение. Как видите, для сравнения используется не одно равно, а целых два. Дело в том, что одно равно используется для присваивания переменным значений, а два – для сравнений. Ведь это разные операции, так что их сферы влияния пришлось разграничить. Посмотрим, какие есть операторы сравнения:
- == – равно. Проверка, равны ли два значения;
- != – не равно. Проверяется, не совпадают ли два значения;
- > – больше. Узнаём, больше ли левое значение, чем правое;
- < – меньше;
- >= – больше или равно. Позволяет понять, если левое значение не меньше, чем правое;
- <= – меньше или равно.
Других операторов сравнения в Java нет – знать нужно только эти 6.
If-then-else
Один из наиболее базовых способов реализации условий в Java – использование оператора if-then-else. Блок if определяет проверяемое условие, then – это блок кода для выполнения, если условие выполнено, а else – блок кода, который нужно выполнить, если условие не выполнено. Блок else необязателен, то есть, если при невыполнении условия не нужно чего-либо предпринимать, можно не писать пустой блок else, а просто его опустить. Синтаксис для двух этих вариантов следующий:
1 2 3 4 5 |
if (условие) { // Код выполняется, если условие истинно } else { // Код выполняется, если условие ложно } |
1 2 3 |
if (условие) { // Код выполняется, если условие истинно } |
Этот способ проверки условия используется всеми и повсеместно, в отличие от двух других. Согласно соглашению о кодировании, фигурные скобки для блоков условий нужно ставить всегда. Даже когда в теле будет всего одна строка. Напишем небольшой пример.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import java.util.Scanner; public class FirstProject { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Ваш возраст -> "); int age = scanner.nextInt(); if (age >= 18) { System.out.println("Держите ваш пивной напиток"); } else { System.out.println("Вон из пивного магазина!"); } } } |
Как видно, результат выполнения программы зависит от того, что введёт пользователь в переменную age, и здесь есть два варианта развития событий: пиво получено или не получено. Условия бывают и более сложными, когда вариантов развития – множество.


Если вы хотите проверить два условия в if, или больше, тогда можно воспользоваться так называемыми логическими операторами. Их в Java всего 2: “и” (&&), “или” (||).
Опробуем логическое “и” (&&). Условие будет верным только если оба выражения истинны (true). Для проверки, что сегодня 14-е число и 2-ой месяц, условие будет выглядеть так:
1 2 3 |
if (day == 14 && month == 2) { ... } |
Если же сегодня 14-е число, но не 2-ой месяц, или наоборот, условие будет не выполнено (false). Код в теле блока if выполняться не будет.
Познакомимся с логическим “или” (||). Условие верно, если хотя бы одно из выражений истинно (true). Проверка, что введённый символ равен ‘F’ или ‘D’:
1 2 3 |
if (symbol == 'F' || symbol == 'D') { ... } |
Теперь попробуем написать более сложное условие, состоящее из четырёх под-условий. Например: хотим выяснить, работает ли сейчас пиццерия. Её рабочее время: 09:00-23:00, однако она ещё прерывается на обед с 13:00 до 14:00. Тогда условие проверки, работает ли она в конкретный час, будет выглядеть так:
1 2 3 |
if (currentHour >= 9 && currentHour <= 23 && (currentHour < 13 || currentHour > 14)) { ... } |
Для отделения связки условий используются скобки, как для (currentHour < 13 || currentHour > 14). Таким образом, 2 под-условия в скобках будут учтены в совокупности, а не по отдельности. Нам просто нужно, чтобы текущий час был меньше 13-ти либо больше 14-ти. Однако нам неважно, первое ли истинно под-условие, или второе. Поэтому здесь логическое “или”.
Но обязательно, чтобы час работы был больше либо равен 9, и, в то же время, меньше либо равен 23. Поэтому логическое “и”. Также сейчас не должно быть время перерыва. Это учтено в скобках (currentHour < 13 || currentHour > 14). Поэтому результат этих скобок также добавляем к общему условию при помощи логического “и”.
Правда, лучше такие огромные условия не городить.
Тернарный оператор
Тернарный оператор в Java позволяет компактно записать условие с двумя вариантами значений в результате. Его синтаксис:
1 |
результат = (условие) ? значение_если_истина : значение_если_ложь; |
Он подойдёт в тех случаях, когда нужно выбрать между двумя значениями. Однако для больших блоков выполняемого кода в случае срабатывания одного из условий он не подходит. Приправим теорию примером, переформулировав тот, что уже был на if-then-else в новый с использованием тернарного оператора:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import java.util.Scanner; public class FirstProject { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Ваш возраст -> "); int age = scanner.nextInt(); String strToShow = (age >= 18) ? "Держите ваш пивной напиток" : "Вон из пивного магазина!"; System.out.println(strToShow); } } |
Изменений в коде произошло немного. Изменений в работе программы – ноль. Всё выполняется и выводится ровно так же. Но разница – в записи кода.
Тернарный оператор порой выглядит элегантнее, чем запись if-then-else, но это только в отдельных случаях. Обычно блок if-then-else гораздо проще читается, а это важно – читаемость кода. Кому-то же его потом читать.
Switch-case
Switch-case конструкция используется для проверки одной переменной на несколько возможных значений – множество разветвлений. В Java она имеет следующий вид:
1 2 3 4 5 6 7 8 9 10 11 |
switch (выражение) { case значение1: // Код, выполняемый при совпадении с значением1 break; case значение2: // Код, выполняемый при совпадении с значением2 break; // ... другие случаи ... default: // Код, выполняемый, если нет совпадений с предыдущими значениями } |
В скобки switch-а проставляется значение или выражение, в зависимости от которого будет выбрана дорожка, по которой пойти. Case-ы – это и есть такие дорожки. Рядом с ключевым словом case пишется одно из значений, а затем в блоке case-а располагается код, который выполняется в случае, если исходное значение или выражение равно тому значению, которое задано в этом case.
Есть один нюанс. В конце тела каждого case-а в коде выше написан оператор break. Он прерывает выполнение оператора. Если break не прописать, то при совпадении со значением из первого case-а, программа выполнит всё его тело, а потом не выйдет из switch-а, а продолжит выполнять код всех остальных case-ов подряд, пока не наткнётся на break.
Создадим пример, где пользовательскому взору предстаёт нехитрое меню из трёх пунктов. В силу того, пользователь волен самостоятельно выбирать желаемый путь развития событий.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import java.util.Scanner; public class FirstProject { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Выберите пункт меню:"); System.out.println("1 - астрологический прогноз"); System.out.println("2 - шутка-прибаутка"); System.out.println("3 - фундаментальный анализ рынка"); int choice = scanner.nextInt(); switch (choice) { case 1: System.out.println("Сегодня Луна в высокой степени влияния на вашу жизнь — " + "это идеальное время для улучшения отношений с космическими соседями"); break; case 2: System.out.println("Почему компьютеру всегда холодно? Потому что он Windows открывает!"); break; case 3: System.out.println("По последним данным исследования, рынок сковородок находится в " + "горячем состоянии, и ожидается рост спроса на антипригарные покрытия в ближайшие месяцы"); break; default: System.out.println("Вы выбрали не то число!"); } } } |
Причём значение, которое пишется справа от каждого case-а, обязательно должно быть константой. Например, как в коде выше – числа.
Результаты выполнения:


В программировании без условий нереально. Они позволяют создавать адаптивные и гибкие программы. Так что вы можете выбирать разные подходы в зависимости от конкретной задачи.