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

Во многих задачах нужно действовать по-разному в зависимости от условия:
если число положительное – написать одно, если отрицательное – другое, если ноль – третье.

Для этого в Java есть оператор if. Он проверяет логическое выражение (да/нет) и в зависимости от результата выполняет нужный блок кода.

int x = in.nextInt();

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

Ввод
7
Вывод
Положительное

Основное

Условие в Java всегда основано на значении типа booleantrue или false.

Основные формы записи:

if (условие) {
    // код, если условие истинно
}
if (условие) {
    // если истинно
} else {
    // если ложно
}
if (условие1) {
    // вариант 1
} else if (условие2) {
    // вариант 2
} else {
    // все остальные случаи
}

Чаще всего условия строятся из сравнений (==, !=, <, >, <=, >=) и логических операций (&&, ||, !).


Простое условие: if

Самый простой вариант — выполнить блок кода только когда условие истинно.

int age = in.nextInt();

if (age >= 18) {
    System.out.println("Взрослый");
}

System.out.println("Конец программы");

Если age >= 18 истинно, будет выведено два сообщения.
Если ложно — только "Конец программы".


Два варианта: if … else

Когда нужно выбрать между двумя вариантами, используется if … else:

int x = in.nextInt();

if (x % 2 == 0) {
    System.out.println("Чётное");
} else {
    System.out.println("Нечётное");
}

Здесь всегда выполняется ровно один из блоков: либо после if, либо после else.


Несколько вариантов: цепочка if … else if … else

Если вариантов больше двух, можно сделать цепочку условий:

int x = in.nextInt();

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

Блоки проверяются сверху вниз:

  • сначала проверяется первое условие;
  • если оно ложно, проверяется следующее else if;
  • если все условия ложны, выполняется блок else (если он есть).

Диапазоны и составные условия

Частая задача — проверить, попадает ли число в некоторый диапазон.

int x = in.nextInt();

if (x >= 1 && x <= 100) {
    System.out.println("В диапазоне 1..100");
} else {
    System.out.println("Вне диапазона");
}

Здесь используется логическое И (&&): оба условия x >= 1 и x <= 100 должны быть истинны.

Другой пример — один из нескольких вариантов:

int month = in.nextInt();

if (month == 12 || month == 1 || month == 2) {
    System.out.println("Зима");
}

Здесь логическое ИЛИ (||): достаточно, чтобы истинным было хотя бы одно из сравнений.


Вложенные условия

Иногда удобно писать условия внутри условий:

int x = in.nextInt();

if (x >= 0) {
    if (x % 2 == 0) {
        System.out.println("Неотрицательное чётное");
    } else {
        System.out.println("Неотрицательное нечётное");
    }
} else {
    System.out.println("Отрицательное");
}

Такие конструкции нужно писать аккуратно и не усложнять без необходимости.
Часто вложенные if можно заменить на одну цепочку if … else if … else.


Типичные шаблоны

Максимум из двух чисел

int a = in.nextInt();
int b = in.nextInt();

int max;

if (a >= b) {
    max = a;
} else {
    max = b;
}

System.out.println(max);

Классический «знак числа»

int x = in.nextInt();

if (x > 0) {
    System.out.println(1);
} else if (x < 0) {
    System.out.println(-1);
} else {
    System.out.println(0);
}

Проверка корректности значения

int score = in.nextInt();

if (score < 0 || score > 100) {
    System.out.println("Некорректное значение");
} else {
    System.out.println("ОК");
}

Блок-схемы

Что нужно запомнить

Условие в if — это логическое выражение (boolean), которое даёт true или false.

Основные формы: одиночный if, пара if … else и цепочка if … else if … else.

Сложные условия удобно строить из сравнений и логических операций: диапазоны — через &&, варианты «или то, или это» — через ||.

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

Допустим, мы хотим по данному числу x определить его абсолютную величину (модуль). Программа должна напечатать значение переменной x, если x > 0, или же величину -x в противном случае. Линейная структура программы нарушается: в зависимости от справедливости условия x > 0 должна быть выведена одна или другая величина. Код программы на C++ имеет вид:

#include <iostream>
using namespace std;
int main()
{
    int x;
    cin >> x;
    if (x < 0){
        x = -x;
    }
    cout << x;
    return 0;
}

Ввод
-8
Вывод
8

В этой программе используется условная инструкция if (если). После слова if указывается проверяемое логическое выражение x > 0 в круглых скобках. После этого идет блок (последовательность) инструкций, который будет выполнен, если значение логического выражения истинно. Блок выделяется фигурными скобками. В нашем примере в блоке одна операция: умножение x на -1. Если в блоке ровно одна операция, то фигурные скобки можно не ставить, но мы рекомендуем использовать фигурные скобки в любом случае.

Данную задачу можно решить другим способом с помощью инструкции else (иначе):

#include <iostream>
using namespace std;
int main()
{
    int x;
    cin >> x;
    if (x >= 0){
        cout << x;
    } else{
        cout << -x;
    }
    return 0;
}

Блок внутри инструкции else будет выполнен только в том случае, если логическое выражение внутри if вернуло false (ложь). Инструкция else всегда относится к какой-либо инструкции if.

Каскадные и вложенные условные инструкции

Задача про високосный год

Дано натуральное число. Требуется определить, является ли год с данным номером високосным. Если год является високосным, выведите YES, иначе выведите NO.

Напомним правило григорианского календаря: год високосный, если его номер делится на 4, но не делится на 100, или если он кратен 400.

Решение (вложенные условия):

#include <iostream>
using namespace std;

int main()
{
    int year;
    cin >> year;
    if (year % 4 == 0){
        if (year % 100 == 0){
            if (year % 400 == 0){
                cout << "YES" << endl;
            }
            else {
                cout << "NO" << endl;
            }
        } else {
            cout << "YES" << endl;
        }
    } else {
        cout << "NO" << endl;
    }
    return 0;
}

Программа получилась довольно громоздкой, напишем решение проще:

#include <iostream>
using namespace std;

int main()
{
    int year;
    cin >> year;
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0 ){
        cout << "YES" << endl;
    } else {
        cout << "NO" << endl;
    }
    return 0;
}

Задача про минимум из двух чисел

Даны два числа, выведите минимальное из них.

Решение:

#include <iostream>
using namespace std;

int main()
{
    int a, b;
    cin >> a >> b;
    if (b < a){
        a = b;
    }
    cout << a;
    return 0;
}

Задача про минимум из трёх чисел

Даны три числа, выведите минимальное из них.

Решение:

#include <iostream>
using namespace std;

int main()
{
    int a, b, c;
    cin >> a >> b >> c;
    if (b < a){
        a = b;
    }
    if (c < a){
        a = c;
    }
    cout << a;
    return 0;
}

Задача про One, Two, Three и Other

Пусть дано число x. Необходимо вывести:

  • One, если x = 1;
  • Two, если x = 2;
  • Three, если x = 3;
  • Other в любом другом случае.

Решение:

#include <iostream>
using namespace std;

int main()
{
    int x;
    cin >> x;
    if (x == 1){
        cout << "One" << endl;
    }
    if (x == 2){
        cout << "Two" << endl;
    }
    if (x == 3){
        cout << "Three" << endl;
    }
    if (x < 1 || x > 3){
        cout << "Other" << endl;
    }
    return 0;
}

Если мы захотим добавить отдельный вывод Four для x = 4, в программу придется добавить еще одно условие и исправить условие для вывода Other. Такой подход может привести к ошибкам. Поэтому перепишем программу с каскадом else if:

#include <iostream>
using namespace std;

int main()
{
    int x;
    cin >> x;
    if (x == 1){
        cout << "One" << endl;
    } else if (x == 2){
        cout << "Two" << endl;
    } else if (x == 3){
        cout << "Three" << endl;
    } else {
        cout << "Other" << endl;
    }
    return 0;
}

При таком способе программу легче модифицировать при добавлении других чисел.


По материалам:
М. Густокашин. Введение в программирование на языке C++. Сириус Курсы. Перейти к курсу.

В Python оператор if выбирает, какой блок кода выполнить, в зависимости от условия.

Условия обычно пишут как сравнение (x > 0, a == b) или как логическое выражение с and, or, not.

Основное

if условие: – выполнить блок, если условие истинно.

if ...: ... else: ... – выбрать один из двух вариантов.

if ...: ... elif ...: ... else: ... – выбрать один из нескольких вариантов.

В Python важно, что блоки кода задаются отступами.

Пример: знак числа

x = int(input())

if x > 0:
    print("Положительное")
elif x < 0:
    print("Отрицательное")
else:
    print("Ноль")

Ввод
-3
Вывод
Отрицательное

Пример: чётное или нечётное

x = int(input())

if x % 2 == 0:
    print("Чётное")
else:
    print("Нечётное")

Пример: диапазон

x = int(input())

if 1 <= x <= 100:
    print("В диапазоне 1..100")
else:
    print("Вне диапазона")

Что можно писать в условии

В Java в if (...) должно быть строго boolean.

В C++ в условии можно написать и bool, и число: 0 – ложь, ненулевое – истина.

В Python можно писать True/False, сравнения, а также использовать «истинность» значений (например, 0 считается ложью). В задачах обычно удобнее писать сравнения.

Как выглядит блок кода

В Java и C++ блоки задаются фигурными скобками { ... }.

В Python блоки задаются отступами.

Ключевые слова

Java: if, else if, else.

C++: if, else if, else.

Python: if, elif, else.

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

Java и C++: &&, ||, !.

Python: and, or, not.

Частая ошибка в C++

В условии легко перепутать == (сравнение) и = (присваивание). В if нужно сравнение.