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

Логика Java: Core

Видео может быть заблокировано из-за расширений браузера. В статье вы найдете решение этой проблемы.

Логический тип данных

Логические выражения позволяют отвечать на вопросы, которые возникают во время работы программы.

public class Example {
    public static void main(String[] args) {
        // Операции сравнения
        System.out.println("5 > 6 -> " + (5 > 6));  //=> "5 > 6 -> false"
        System.out.println("5 < 6 -> " + (5 < 6));  //=> "5 < 6 -> true"
        System.out.println("5 <= 6 -> " + (5 <= 6)); //=> "5 <= 6 -> true"
        System.out.println("5 >= 6 -> " + (5 >= 6)); //=> "5 >= 6 -> false"
        // Операция сравнения '==' не тоже самое, что присваивание '='
        System.out.println("5 == 6 -> " + (5 == 6)); //=> "5 == 6 -> false"
        System.out.println("5 != 6 -> " + (5 != 6)); //> "5 != 6 -> true"

        // Логический тип данных в Java — boolean
        boolean a = 5 > 6;
        boolean b = false;
        System.out.println("a = " + a); //=> "a = false"
        System.out.println("b = " + b); //=> "b = false"

        // Предикат

        // Предикат — это метод, который отвечает на утвердительный вопрос «да» или «нет»,
        // возвращая значение типа boolean.

        // isEmpty() — предикат, который отвечает на вопрос,
        // является ли строка пустой

        String exampleABCStr = "abc";
        String exampleEmptyStr = "";

        System.out.println(
            "Is 'abc' empty? " + LiveCoding.isEmpty(exampleABCStr)
        ); // => "Is 'abc' empty? false"

        System.out.println(
            "Is '' empty? " + LiveCoding.isEmpty(exampleEmptyStr)
        ); // => "Is '' empty? true"
    }

    /*
     * Метод определяет, является ли строка input пустой
     * (то есть не содержит ни одного символа,
     * а соответсвенно её длина будет равна нулю).
     * Если строка не пустая - метод возвращает false.
     * Если строка пустая - метод возвращает true.
     */
    static boolean isEmpty(String input) {
        return input.length() == 0;
    }
}

Дальнейшие вызовы будем показывать без определения класса и метода

Логические операции

    // Логическое отрицание
    System.out.println("NOT true -> " + !true); // => "NOT true -> false"
    System.out.println("NOT false -> " + !false); // => "NOT false -> true"

    // Логическое "И"
    System.out.println("true AND true -> " + (true && true)); // => "true AND true -> true"
    System.out.println("true AND false -> " + (true && false)); // => "true AND false -> false"
    System.out.println("false AND true -> " + (false && true)); // => "false AND true -> false"
    System.out.println("false AND false -> " + (false && false)); // => "false AND false -> false"

    // Логическое "ИЛИ"
    System.out.println("true OR true -> " + (true || true)); // => "true OR true -> true"
    System.out.println("true OR false -> " + (true || false)); // => "true OR false -> true"
    System.out.println("false OR true -> " + (false || true)); // => "false OR true -> true"
    System.out.println("false OR false -> " + (false || false)); // => "false OR false -> false"

    // Результаты различных логических операций даны в булевой алгебре в таблицах истинности

    boolean a = true;
    boolean b = false;
    boolean c = true;

    System.out.println(!a); // => false
    System.out.println(a || b || c); // => true
    System.out.println(a && !b && c); // => true
    System.out.println((a && b) || c); // => true

Условный оператор if

    // Если условие истинно, выполняются инструкции в теле if
    if (true) {
        System.out.println("Мы зашли в тело if...");
    }
    // Если условие ложно, инструкции в теле if не выполняются
    if (false) {
        System.out.println("Надпись невидимка...");
    }

    int number = 22;

    // number % 2 == 0
    // 0 == 0
    // true

    if (number % 2 == 0) {
        System.out.println("Число четное."); // "Число четное"
    }

    String str = "";
    if (!LiveCoding.isEmpty(str)) {
        System.out.println("String str is not empty.");
    }

    // Расширенный оператор if с использованием else.
    // Инструкции в else выполняются в том случае, если условие ложно


    int number = 2;

    if (number % 2 == 1) { // false
        // Эта инструкция не выполняется
        System.out.println("Число нечётное.");
    } else {
        // Выполняется эта инструкция
        System.out.println("Число чётное.");
        // => "Число четное"
    }

    int number = 7;

    if (number > 0) { // true
        // Выполняется эта инструкция
        System.out.println("Число положительное.");
        // => "Число положительное."
    } else {
        // Эта инструкция не выполняется
        System.out.println("Число отрицательное.");
    }

    int number = -9;

    if (number > 0) {
        System.out.println("Положительное число.");
    } else if (number == 0) {
        System.out.println("Ноль.");
    } else {
        System.out.println("Отрицательно число.");
        // => "Отрицательно число."
    }

Тернарный оператор

    int number = 22;
    int nextEvenNumber;

    // Запись при помощи условного оператора if
    if (number % 2 == 0) {
        nextEvenNumber = number + 2;
    } else {
        nextEvenNumber = number + 1;
    }
    System.out.println("Next even number: " + nextEvenNumber);
    // => "Next even number: 24"

    // Запись при помощи тернарного оператора
    // condition ? exprIfTrue : exprIfFalse
    // Если условие condition истинно, тернарный оператор
    // принимает значение операнда exprIfTrue
    // Если ложно, принимает значение exprIfFalse

    int number = 89;
    int nextEvenNumber = number % 2 == 0 ? number + 2 : number + 1;
    System.out.println("Next even number: " + nextEvenNumber);
    // "Next even number: 90"

    // Для удобства написания и чтения условных выражений можно
    // использовать скобки
    int nextEvenNumber = number % 2 == 0 ? (number + 2) : (number + 1);

Конструкция switch case

    int mark = 3;

    switch (mark) {
        case 1:
            System.out.println("Вы получили кол!");
            break;
        case 2:
            System.out.println("Вы получили двойку!");
            break;
        case 3:
            System.out.println("Вы получили тройку!");
            // => "Вы получили тройку!"
            break;
        case 4:
            System.out.println("Вы получили хорошую отметку!");
            break;
        case 5:
            System.out.println("Вы проявили себя на отлично!");
            break;
        default:
            System.out.println("Таких оценок не бывает!");
            break;

    int anotherMark = 100;

    switch (anotherMark) {
        case 1:
            System.out.println("Вы получили кол!");
            break;
        case 2:
            System.out.println("Вы получили двойку!");
            break;
        case 3:
            System.out.println("Вы получили тройку!");
            break;
        case 4:
            System.out.println("Вы получили хорошую отметку!");
            break;
        case 5:
            System.out.println("Вы проявили себя на отлично!");
            break;
        default:
            // В случае, если совпадений не найдено,
            // выполняются инструкции в default
            System.out.println("Таких оценок не бывает!");
            // => "Таких оценок не бывает!"
            break;

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

  1. Урок по булевой алгебре
  2. Курс по логике

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

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

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

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
900
упражнений
2000+
часов теории
3200
тестов

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

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

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

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

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

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

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

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

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

Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу