Операторы ветвления. Логический тип

Иногда нужно выполнять различные действия в зависимости от полученной информации. Разделение хода выполнения программы на варианты называется ветвлением. В самом простом виде оператор ветвления выглядит так:

if (условие) {
    // здесь описываются действия
}

Если условие выполняется (говорят, что оно истинно), выполняются действия. Если условие не выполняется (говорят, что оно ложно), действия игнорируются.

Простой пример

public static void main() {
    check(4);
    check(-1);
}
public static void check(int n) {
    if (n < 0) {
        Syste.out.println("Число " + n + " отрицательно.");
    }
}

Вывод:

Число -1 отрицательно.
{"name":"main","subCalls":[{"name":"check(4)","subCalls":[{"name":"n (4) меньше нуля? Нет.","subCalls":[]}]},{"name":"check(-1)","subCalls":[{"name":"n (-1) меньше нуля? Да.","subCalls":[{"name":"Вывести \"Число \" + n + \" отрицательно.\"","subCalls":[]}]}]}]}

Пример с двумя вариантами

public static void main() {
    check(4);
    check(-1);
}
public static void check(int n) {
    if (n >= 0) { // больше или равно нулю
        System.out.println("Число " + n + " неотрицательно.");
    } else {
        System.out.println("Число " + n + " отрицательно.");
    }
}

Вывод:

Число 4 неотрицательно.
Число -1 отрицательно.
{"name":"main","subCalls":[{"name":"check(4)","subCalls":[{"name":"n (4) больше или равно нулю? Да.","subCalls":[{"name":"Вывести \"Число \" + n + \"неотрицательно.\"","subCalls":[]}]}]},{"name":"check(-1)","subCalls":[{"name":"n (-1) больше или равно нулю? Нет.","subCalls":[{"name":"Вывести \"Число \" + n + \"отрицательно.\"","subCalls":[]}]}]}]}

Пример с тремя вариантами

Можно проверять несколько условий с помощью оператора else if.

public static void main() {
    check(4);
    check(-1);
    check(0);
}
public static void check(int n) {
    if (n < 0) {
        System.out.println("Число " + n + " отрицательно.");
    } else if (n == 0) { // сравнение обозначается двойным «равно», чтобы не путать с присваиванием
        System.out.println("Число " + n + " — ноль.");
    } else {
        System.out.println("Число " + n + " положительно.");
    }
}

Вывод:

Число 4 положительно.
Число -1 отрицательно.
Число 0 — ноль.
{"name":"main","subCalls":[{"name":"check(4)","subCalls":[{"name":"n (4) меньше нуля? Нет.","subCalls":[{"name":"n (4) равно нулю? Нет.","subCalls":[{"name":"Вывести \"Число \" + n + \" положительно.\"","subCalls":[]}]}]}]},{"name":"check(-1)","subCalls":[{"name":"n (-1) меньше нуля? Да.","subCalls":[{"name":"Вывести \"Число \" + n + \" отрицательно.\"","subCalls":[]}]}]},{"name":"check(0)","subCalls":[{"name":"n (0) меньше нуля? Нет.","subCalls":[{"name":"n (0) равен нулю? Да.","subCalls":[{"name":"Вывести \"Число \" + n + \" — ноль.\"","subCalls":[]}]}]}]}]}

Больше вариантов

Блоков else if может быть неограниченное количество. Пример:

public static void main() {
    say(0);
    say(1);
    say(2);
    say(3);
}
public static void say(int n) {
    if (n == 0) {
        System.out.println("ноль");
    } else if (n == 1) {
        System.out.println("один");
    } else if (n == 2) {
        System.out.println("два");
    } else {
        System.out.println(n);
    }
}

Вывод:

ноль
один
два
3

Логический тип boolean

Логическое выражение принимает значение true или false (выражение либо истинно, либо ложно). Например, n == 0, как и любое другое сравнение, — логическое выражение.

boolean nIsZero = n == 0;
if (nIsZero) {
    //...

эквивалентно

if (n == 0) {
    //...

Разные булевы выражения можно комбинировать с помощью операций «и» и «или».

Выражение «a или b» истинно, если a или b истинно, и записывается как a || b. Выражение будет ложно, только если и a, и b ложны.

Выражание «a и b» истинно, только если a истинно и b истинно, и записывается как a && b. Выражение будет ложно, если а или b ложно.

if (a == 0 || a == 3) {
    // код будет выполнен, если a равно нулю или трём
}
if (a == 0 && b == 3) {
    // код будет выполнен, если a равно нулю и b равно трём
}

Для булевых выражений действует принцип ускоренного вычисления. Например, в коде

int a = 0;
if (a == 0 || a == 3) {
…

выражение a == 0 истинно, а значение выражения a == 3 не будет вычислено за ненадобностью, т. к. уже известно, что всё выражение истинно.

Аналогично, в коде

int a = 8;
if (a == 0 && b == 3) {
…

выражение a == 0 ложно, поэтому значение выражения b == 3 вычислено не будет.

Задачи к уроку Комментарии к уроку

Определён ли факториал

Объявите метод isFactDeterminedFor(int n), который выведет "Факториал числа " + n + " определён.", если n неотрицательно, или "Факториал числа " + n + " не определён.", если n отрицательно.

{{ message.data }}

Хорошая погода

true соответствует хорошей погоде, false — плохой. Выведите «чистое небо на километры вперёд!» или «прямо как в Петербурге.» соответственно.

{{ message.data }}

Сообщить об ошибке