Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Логические операторы Java: Основы программирования

Мы уже умеем писать методы, которые проверяют одиночные условия. Теперь научимся строить составные условия. Хороший пример: проверка пароля. Как вы знаете, некоторые сайты при регистрации хотят пароль от 8 до 20 символов в длину. Честно говоря, это странное ограничение, но что поделать. В математике мы бы написали 8 <= x <= 20, но в Java такой трюк не пройдет. Нам придётся сделать два отдельных логических выражения и соединить их специальным оператором «И»:

Вот метод, который принимает пароль и говорит, соответствует ли он условиям (true) или не соответствует (false):

// Пароль длиннее 8 символов **И** пароль короче 20 символов.
public static boolean isCorrectPassword(String password) {
    var length = password.length();
    return length >= 8 && length <= 20;
}

isCorrectPassword("qwerty"); // false
isCorrectPassword("qwerty1234"); // true

&& - означает «И». Всё выражение считается истинным, только если истинен каждый операнд — каждое из составных выражений. Другими словами, && означает «и то, и другое». Приоритет этого оператора ниже, чем приоритет операторов сравнения, поэтому выражение отрабатывает правильно без скобок. Кроме && часто используется оператор || — «ИЛИ». Он означает «или то, или другое, или оба». Операторы можно комбинировать в любом количестве и любой последовательности, но когда одновременно встречаются && и ||, то приоритет лучше задавать скобками.

a && b || c; // Без скобок сложно понять приоритет
a && (b || c) // Приоритет очевиден

Другой пример. Мы хотим купить квартиру, которая удовлетворяет условиям: площадь от 100 кв. метров и больше на любой улице ИЛИ площадь от 80 кв. метров и больше, но на центральной улице Main Street. Напишем метод, проверяющий квартиру. Он принимает два параметра: площадь (число) и название улицы (строку):

isGoodApartment(91, "Queens Street"); // false
isGoodApartment(78, "Queens Street"); // false
isGoodApartment(70, "Main Street"); // false

isGoodApartment(120, "Queens Street"); // true
isGoodApartment(120, "Main Street"); // true
isGoodApartment(80, "Main Street"); // true

public static boolean isGoodApartment(int area, String street) {
  return area >= 100 || (area >= 80 && "Main Street".equals(street));
}

Область математики, в которой изучаются логические операторы, называется булевой алгеброй. Ниже показаны «таблицы истинности» — по ним можно определить, каким будет результат применения оператора:

И &&

A B A && B
TRUE TRUE TRUE
TRUE FALSE FALSE
FALSE TRUE FALSE
FALSE FALSE FALSE

Оператор И на примере папы

ИЛИ ||

A B A ❘❘ B
TRUE TRUE TRUE
TRUE FALSE TRUE
FALSE TRUE TRUE
FALSE FALSE FALSE

Оператор ИЛИ на примере папы

Отрицание

Наряду с конъюнкцией (И) и дизъюнкцией (ИЛИ), часто используется операция «отрицание». Отрицание меняет логическое значение на противоположное. В программировании ему соответствует оператор !. Если есть метод, проверяющий чётность числа, то с помощью отрицания можно выполнить проверку нечётности:

public static boolean isEven(int number) {
    return number % 2 == 0;
}

isEven(10);  // true
!isEven(10); // false

То есть мы просто добавили ! слева от вызова метода и получили обратное действие. Отрицание можно применять не только к вызову метода, но и к целому выражению:

// x не равен 5 и не равен 3
!(x == 5 && x == 3)

// Это же выражение можно записать и так
x != 5 || x != 3

Отрицание — мощный инструмент, который позволяет лаконично выражать задуманные правила в коде без необходимости писать новые методы.


Дополнительные материалы

  1. Булева алгебра
  2. Конъюнкция
  3. Дизъюнкция
  4. Законы Де Моргана

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.

Об обучении на Хекслете

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 130 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
25 мая 10 месяцев

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»