Условия
Условия позволяют программе выбирать, какой код выполнить. Без них программа всегда делала бы одно и то же: показывала бы скидку всем подряд или пускала на сайт без пароля.
if
Код в фигурных скобках после if выполняется, только если условие в круглых скобках истинно. Код в фигурных скобках называется блоком:
void main() {
int age = 20;
if (age >= 18) {
IO.println("Доступ разрешён");
}
}Результат:
Доступ разрешёнУсловие в Java обязательно должно иметь тип boolean. Число или строку в условие подставить нельзя — компилятор сообщит об ошибке.
else
Блок else выполняется, когда условие ложно. Из двух блоков всегда срабатывает ровно один:
void main() {
int age = 15;
if (age >= 18) {
IO.println("Доступ разрешён");
} else {
IO.println("Доступ запрещён");
}
}Результат:
Доступ запрещёнelse if
Если вариантов больше двух, между if и else добавляют else if. Условия проверяются сверху вниз, и срабатывает первое подходящее — остальные пропускаются:
void main() {
int score = 75;
if (score >= 90) {
IO.println("Отлично");
} else if (score >= 70) {
IO.println("Хорошо");
} else {
IO.println("Нужно подтянуть");
}
}Результат:
ХорошоПорядок важен: если бы проверка >= 70 стояла первой, результат 95 баллов тоже получил бы «Хорошо».
Составные условия
Несколько проверок объединяют логическими операторами && (и) и || (или). Java вычисляет их сокращённо: если ответ ясен по левой части, правая не проверяется:
void main() {
int age = 25;
boolean hasTicket = true;
if (age >= 18 && hasTicket) {
IO.println("Проходите на сеанс");
}
}Результат:
Проходите на сеансТернарный оператор
Когда нужно выбрать одно из двух значений, удобен тернарный оператор условие ? значение1 : значение2. Он возвращает первое значение, если условие истинно, и второе — если ложно:
void main() {
int stock = 0;
String status = stock > 0 ? "В наличии" : "Нет в наличии";
IO.println(status);
}Результат:
Нет в наличииТернарный оператор хорош для коротких выборов. Если веток больше или в них несколько действий, пишите обычный if.
Частая ошибка
Лишняя точка с запятой после условия отрезает от него блок. if управляет пустой инструкцией ;, а блок в скобках выполняется всегда:
void main() {
int balance = 0;
if (balance > 100); {
IO.println("Покупка оформлена");
}
}Результат:
Покупка оформленаКомпилятор не считает это ошибкой, поэтому её легко пропустить. После ) условия сразу должна идти {.