4. Условные операторы (Java. Базовый курс)

4. Условные операторы (Java. Базовый курс)


Date of publication 24.01.2021



На данном уроке изучим условные операторы языка Java, или как их ещё называют - операторы ветвления.

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

Часто в реальных приложениях требуется выполнить какое-либо действие в зависимости от условия. Например пользователь банковского приложения хочет перевести деньги своему другу, но, прежде чем выполнить перевод, необходимо проверить есть ли нужная сумма на счёте. Если денег достаточно, то выполняем перевод, а если нет, то выводим соответсвующее сообщение.

Чтобы было понятнее, можно проиллюстрировать этот простой пример в виде блок-схемы:

Блок-схема с ветвлением

Для реализации такого алгоритма на Java как раз и потребуются условные операторы (операторы ветвления). Основная идея в том, что сначала нужно проверить некоторое условие, а затем принять решение, в зависимости от результата.

 

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

Условный оператор if позволяет проверить заданное условие и выполнить определённые действия в зависимости от результата. Простейшая форма записи оператора if выглядит так:

if (условие) действие;

Давайте напишем простую программу, чтобы понять как работает данный оператор. Предположим что нам нужно определить чётное ли число ввёл пользователь и вывести сообщение в консоль. В этот раз я не стал добавлять новые классы в проект из предыдущего урока, с создал новый проект для удобства:

Программа "Чётное/нечётное"

Сначала всё как обычно - в строке 8 я инициализирую уже знакомую переменную input типа Scanner, a в строке 9 читаю из консоли число типа int и записываем его в переменную a.

Далее начинается самое интересное! Чтобы определить чётное число или нет, нужно выполнить операцию деления по модулю - %. Это нужно для получения остатка от деления, например если разделить по модулю некоторое число на 2 и остаток равен 0, то число чётное. 
Простые примеры:
4 - чётное число, поэтому 4 % 2 = 0
9 - нечётное число, поэтому 9 % 2 = 1

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

a % 2 == 0

Если остаток от деления значения a на 2 равен 0, то выводим сообщение о том что данное число является чётным:

if (a % 2 == 0) System.out.println("Число " + a + " чётное");

Полный листинг программы:

package ru.akutepov;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int a = input.nextInt();

        if (a % 2 == 0) System.out.println("Число " + a + " чётное");
    }
}


А вот так выглядит пример работы программы:

Пример работы программы "Чётное/нечётное"

На практике очень часто приходится сравнивать одно значение с другим, поэтому в Java есть весь необходимый набор операторов сравнения, которые вместе с логическими операторами позволяют составлять условия любой сложности:

Оператор

Значение

<

Меньше

<=

Меньше или равно

>

Больше

>=

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

==

Равно

!=

Не равно

У нашей программы есть один маленький недостаток - сообщение будет выведено в консоль только если было введено чётное число. Если же введено нечётное число, то никакого сообщения пользователь не получит, а это не очень хорошо.

Чтобы исправить это недоразумение, нам потребуется более сложная форма оператора if:

if (условие) 
    действие 1;
else
    действие 2; 

Такая форма записи предполагает что при выполнении условия будет выполнено действие 1, а если условие не выполнится, то действие 2.

Теперь я могу усовершенствовать программу и выводить сообщение для нечётного числа:

Оператор ветвления if else

К оператору if я дописал блок else в котором будет выводиться сообщение если условие в круглых скобках не выполнится, то есть число окажется нечётным.

Теперь листинг программы выглядит так:

package ru.akutepov;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int a = input.nextInt();

        if (a % 2 == 0)
            System.out.println("Число " + a + " чётное");
        else
            System.out.println("Число " + a + " нечётное");
    }
}

А вот и пример работы:

Пример работы программы с операторами if else

Я ввёл число 7 и получил сообщение “Число 7 нечётное” - всё работает!

На этом возможности оператора if не заканчиваются, давайте разберём самую сложную форму записи оператора:

if (условие 1) {
	действие 1;
	действие 2;
} else if (условие 2) {
	действие 3;
	действие 4;
} else {
    действие 5;
	действие 6;
}

Если нужно выполнить несколько разных действий при выполнении определённого условия, то все действия необходимо поместить в фигурные скобки {}, таким образом формируется новый кодовый блок. На практике рекомендуется всегда использовать фигурные скобки, даже если выполняется всего одно действие. Они структурируют код, улучшают читаемость и уменьшают вероятность допустить ошибку.

С помощью else if можно проверять дополнительные условия, если такая необходимость есть. А else в самом конце сработает если ни одно из условий не выполнится.

В качестве примера напишем новую программу - справочник валют. Программа по цифровому коду валюты будет возвращать буквенный код, а для простоты реализации возьмём всего 3 валюты для справочника:
RUB - 643
USD - 840
EUR - 978

Вот что у меня получилось:

Программа - справочник валют
С помощью if-else-if последовательно проверяется чему равен введёный код валюты, который хранится в переменной currencyCode. Если одно из условий выполнится, то в консоль будет выведен буквенный код валюты, иначе пользователь получит сообщение “Неизвестный код валюты”.

Полный листинг программы:

package ru.akutepov;

import java.util.Scanner;

public class Currency {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int currencyCode = input.nextInt();

        if (currencyCode == 643) {
            System.out.println("RUB");
        } else if (currencyCode == 840) {
            System.out.println("USD");
        } else if (currencyCode == 978) {
            System.out.println("EUR");
        } else {
            System.out.println("Неизвестный код валюты");
        }
    }
}

Пример работы программы:


Пример работы справочника валют

 

Оператор switch

Оператор switch (оператор выбора) является более удобной альтернативой длинным последовательностям if-else-if. Он предоставляет простой способ направить поток исполнения команд по разным ветвям кода в зависимости от значения управляющего выражения. 

Общая форма оператора switch:

switch (выражение) {
    case значение 1:
        // последовательность операторов
        break;
    case значение 2:
        // последовательность операторов
        break;

        ...

    case значение n :
        // последовательность операторов
        break;
    default:
        // последовательность операторов по умолчанию
}

Принцип действия прост: выражение сравнивается с каждым значением в операторах ветвей выбора case. При обнаружении совпадения выполняется последовательность кода следующая после оператора case. Если значения ни одной из констант в операторах case не совпадают со значением выражения, то выполняется оператор выбора по умолчанию - default. Но указывать этот оператор необязательно.

Оператор break служит для прерывания последовательности операторов в ветвях оператора switch. Таким образом, оператор break предназначен для немедленного выхода из оператора switch после завершения выполнения всех операторов в выбранной ветви. Если break не указать, то будут выполнены операторы из ветвей ниже, что может привести к неправильной работе программы.

Для примера я немного доработаю справочник валют:

Пример использования оператора switch

В оператор switch передаётся переменная currencyCode, а в case содержатся константы, с которыми сравнивается переменная currencyCode. При совпадении значения будет выведен буквенный код валюты, иначе отработает оператор default и пользователь получит сообщение “Неизвестный код валюты”.

Листинг программы:

package ru.akutepov;

import java.util.Scanner;

public class Currency {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int currencyCode = input.nextInt();

        switch (currencyCode) {
            case 643:
                System.out.println("RUB");
                break;
            case 840:
                System.out.println("USD");
                break;
            case 978:
                System.out.println("EUR");
                break;
            default:
                System.out.println("Неизвестный код валюты");
        }
    }
}

Оператор switch рекомендуется использовать когда нужно сравнить выражение с большим количеством разных констант и когда нет необходимости в написании сложного логического условия. Иначе удобнее использовать разные формы оператора if.

 

Домашнее задание

  1. Пользователь вводит год в консоль. Определить, является ли год високосным.
  2. Пользователь вводит номер месяца. Необходимо определить название месяца по номеру и вывести его в консоль. Если номер не соответствует ни одному месяцу - вывести сообщение об ошибке.
  3. Пользователь вводит координаты точки и радиус круга с центром в начале координат. Определить, принадлежит ли данная точка кругу. Вывести сообщение в консоль.

< Предыдущий урок     Следующий урок >