Главная » Уроки по Java с нуля » JAVA: Операторы if-else, switch-case (+пишем простейший калькулятор)

JAVA: Операторы if-else, switch-case (+пишем простейший калькулятор)

JAVA: Операторы if-else, switch-case (+пишем простейший калькулятор)
Уроки по Java с нуля
15:47, 21 январь 2024
31
0

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

Для записасания конструкции if-else, нам изначально необходимо прописать ключевой оператор if() где в скобках указываем само условие.

Приведу пример:

public static void main(String[] args) {
    int a = 15, b = 10;
    if (a > b) {
        System.out.println("Да, так и есть.");
    }
}

В скобках мы указали условие - если а больше b, то выведи текст. В результате мы получим вывод текста Да, так и есть. потому что 15 действительно больше 10.

В данном случае мы можем проверять на > больше, на < меньше, на == равенство, на != неравенство, на >= больше или равно, на <= меньше или равно,

Важный момент про переменную boolean: Как мы знаем из предыдущего урока, она имеет параметр, либо true, либо fallse. С одной стороны можно ее прописать как обычно boolean name = false либо true. затем в операторе if прописать, например, (boolean_name != false), но с другой стороны так уже почти никто не пишет.

Запомните, если написать просто if(boolean_name) она эквивалента записи if(boolean_name == true) тогда как вместо if(boolean_name == false) достаточно прописать if(!boolean_name).

public class condit {
    public static void main{String[] args} {
        boolean bool = true;
        if (!bool) {
            System.out.println("Да, так и есть.");
        }
    }
}

Смотря на пример, мы видим, что переменной boolean мы присвоили имя bool, и по умолчанию присвоили значение true, а в операторе if прописано равенство на false, поэтому в этом случае надпись "Да, так и есть." на экран выведено не будет. Однако, если убрать ! из оператора if тогда true = true, и надпись на экран будет выведена.

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

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

Если из примера приведенного выше следует значение по умолчанию boolean = true, а в операторе if прописано равенство на false, то как сказано выше - ничего не произойдет, потому как не прописано, что делать, если условие if не выполнено. Давайте это исправим.

public class condit {
    public static void main{String[] args} {
        boolean bool = true;
        if (!bool) {
            System.out.println("Да, так и есть.");
        } else {
            System.out.println("Нет, это не так.");
        }
    }
}

Вот теперь мы имеем дальнейшее действие. Теперь наша программа знает, что делать если boolean = false, и что делать если boolean = true. Давайте расшифруем: По умолчанию у нас bool = true и если бы в операторе if (если) было бы прописано true, то есть без восклицательного знака, то на экран был бы вывод "Да так и есть", но так как у нас стоит неравенство, выполняется оператор else (еще) и показывает следующий кусочек кода.

Помимо оператора if и оператора else еще существует оператор else if. Этот оператор позволяет добавить дополнительное условие else if прописывается между if и else. Скажем так else if это промежуточная проверка между if и else.

*Если else и else if необходимо писать в строгой последовательности, то оператор if можно писать как самостоятельный, так и после каждого else и else if.

Теперь мы узнали о существовании трёх операторов if, else и else if, и нам конечно же не терпится проверить их все три на практике. Но как же это сделать, если на предыдущих примерах есть только два вывода - истина или ложь? Ничего страшного, мы используем символы || - или, && - и. А как их использовать, покажу в следующих примерах, где за одно закрепим предыдущий урок.

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

public static void main(String[] args) {
    String login = "admin";
    String pass = "12345";

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

Scanner scan = new Scanner(System.in);
System.out.print("Введите логин: ");
String username = scan.nextLine();

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

if(username.equals(login)) {
    System.out.println("Рад приветствовать тебя, " + login);
    System.out.print("Теперь введи пароль: ");
    String passwd = scan.nextLine();

В скобках оператора if через equals мы проверяем, чтобы то, что пользователь написал в username совпадало с тем, что записано в переменной login. Если пользователь на запрос ввести логин в username напишет admin, как это присвоено переменной login, тогда программа его поприветствует, и попросит ввести пароль. Если пользователь напишет другое имя, то сработает оператор else, и на экран будет выведен другой кусочек кода:

} else {
    System.out.println("Вы ввели не верный логин");
}

Наш пользователь ввёл правильный логин admin, программа его поприветствовала, и попросила ввести пароль. Теперь давайте напишем условия для пароля. Для этого мы прямо внутри оператора if напишем еще один оператор if. Да, так как оператор if является самостоятельным, то их один внутри другого можно писать сколько угодно много:

if(passwd.equals(pass)) {
    System.out.println("Ты молодец! Пароль введён верно.");
} else {
    System.out.println("Пароль введён не верно.");
}

По примеру проверки логина мы также проверили правильность ввода пароля, сославшись на переменную pass и дописали условие else, что делать, если пароль будет введен не верно. Полностью код программы выглядит так:

import java.util.Scanner;
public class condit {
    public static void main{String[] args} {
        String login = "admin";
        String pass = "12345";
        Scanner scan = new Scanner(System.in);
        System.out.print("Введите логин: ");
        String username = scan.nextLine();
        if(username.equals(login)) {
            System.out.println("Рад приветствовать тебя, " + login);
            System.out.print("Теперь введи пароль: ");
            String passwd = scan.nextLine();
            if(passwd.equals(pass)) {
                System.out.println("Ты молодец! Пароль введён верно.");
            } else {
                System.out.println("Пароль введён не верно.");
            }
        } else {
            System.out.println("Вы ввели не верный логин");
        }
    }
}

А теперь давайте усложним нашу программу, и попросим пользователя не просто ввести пароль, но и подтвердить его.

Добавляем в нашу программу еще одну переменную с названием confpass

String confpass = "12345";

В первом операторе if, сразу после просьбы пользователя ввести пароль, просим его подтвердить

System.out.print("Подтверди пароль: ");
String confpasswd = scan.nextLine();

А в условии второго оператора if добавляем второе условие через амперсанд &&, чтобы проверка была и по переменной pass и по переменной confpass

if(passwd.equals(pass) && confpasswd.equals(confpass)) {

Если бы мы написали не &&, а например ||, тогда проверка была бы на совпадение хотя бы одной переменной, потому что || это или.

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

import java.util.Scanner;
public class condit {
    public static void main{String[] args} {
        String login = "admin";
        String pass = "12345";
        String confpass = "12345";
        Scanner scan = new Scanner(System.in);
        System.out.print("Введите логин: ");
        String username = scan.nextLine();
        if(username.equals(login)) {
            System.out.println("Рад приветствовать тебя, " + login);
            System.out.print("Теперь введи пароль: ");
            String passwd = scan.nextLine();
            System.out.print("Подтверди пароль: ");
            String confpasswd = scan.nextLine();
            if(passwd.equals(pass) && confpasswd.equals(confpass)) {
                System.out.println("Ты молодец! Пароль введён верно.");
            } else {
                System.out.println("Пароль введён не верно.");
            }
        } else {
            System.out.println("Вы ввели не верный логин");
        }
    }
}

Если в предыдущих примерах мы сами присваивали значение переменным login, pass и confpass, то в следующим примере давайте сделаем так, чтобы пользователь сам вводил значение в переменную. Для этого будем использовать переменную int

Scanner scan = new Scanner(System.in);
System.out.print("Введите число: ");
int num = scan.nextInt();

Здесь всё как обычно, подключаем Scanner, просим пользователя ввести число, а дальше мы будем использовать не привычные нам if-else, а switch-case. Данный оператор проверяет переменную на множество различных значений.

switch (num) {
    case 1:
        System.out.println("Вы ввели число 1");
        break;
    case 2:
        System.out.println("Вы ввели число 2");
        break;
    default:
        System.out.println("Число не найдено.");
}

В скобках switch мы пишем имя переменной, которую будем проверять. В case мы прописали числа, которые будет писать пользователь, и получать соответствующий результат, но в нашем примере видно, если пользователь напишет не 1 и не 2, а любое другое число, тогда сработает default, который аналогичен оператору else.

Теперь давайте напишем простейший калькулятор на основе пройденного материала.

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int res;

Подключаем Scanner для того, чтобы пользователь мог писать числа, объявляем переменную int с именем res. Так как переменная int, то работать будем только с целыми числами, иначе будет выводиться ошибка.

System.out.print("Введите первое целое число: ");
int num1 = scan.nextInt();

Просим пользователя ввести первое целое число, и под это число объявляем переменную int с именем num1

System.out.print("Действие ");
String action = scan.nextLine();
action = scan.nextLine();

Далее просим пользователя указать действие, что делать с числами, складывать, вычитать, делить или умножать. 22 строка в коде обязательна, в противном случае половина дальнейшего кода будет проигнорирована, а чтобы этого не происходило, мы в 21 строке прописали скрытый пустой символ.

System.out.print("Введите второе целое число: ");
int num2 = scan.nextInt();

Просим пользователя ввести второе целое число и также объявляем под него переменную int только с именем num2

switch (action) {
    case "+":
        res = num1 + num2;
        System.out.println("Результат: " +res);
        break;
    case "-":
        res = num1 - num2;
        System.out.println("Результат: " +res);
        break;

И вот тут нам пригодились switch-case. В скобках switch написано имя action переменной String, которая отвечает за действие. В case спрашивается, что делать, при получение данных с action. На примере мы видим, если пользователь в action напишет символ +, то будет происходить сложение переменных num1 и num2, после чего будет выведен результат. То же самое с вычитанием и умножением.

case "/":
    if (num2 == 0)
        System.out.println("На 0 делить нельзя!");
    else {
        res = num1 / num2;
        System.out.println("Результат: " +res);
    }
    break;

Однако, в случае с делением не всё так однозначно, и поэтому здесь мы прибегнем к операторам if-else. Так как на 0 делить нельзя, мы добавляем оператор if в скобках которого прописываем проверку на равенство. То есть, если второе число будет = 0, тогда пользователь увидит сообщение о том, что на 0 делить нельзя. Иначе сработает код else и пользователь получит результат.

Полный код программы выглядит вот так

import java.util.Scanner;
public class condit {
    public static void main{String[] args} {
    Scanner scan = new Scanner(System.in);
    int res;

    System.out.print("Введите первое целое число: ");
    int num1 = scan.nextInt();

    System.out.print("Действие ");
    String action = scan.nextLine();
    action = scan.nextLine();

    System.out.print("Введите второе целое число: ");
    int num2 = scan.nextInt();

    switch (action) {
        case "+":
            res = num1 + num2;
            System.out.println("Результат: " +res);
            break;
        case "-":
            res = num1 - num2;
            System.out.println("Результат: " +res);
            break;
        case "*":
            res = num1 * num2;
            System.out.println("Результат: " +res);
            break;
        case "/":
            if (num2 == 0)
                System.out.println("На 0 делить нельзя!");
            else {
                res = num1 / num2;
                System.out.println("Результат: " +res);
            }
            break;
        default:
            System.out.println("Что-то пошло не так.");
        }
    }
}
Ctrl
Enter
Заметили ошЫбку
Выделите текст и нажмите Ctrl+Enter
Вернуться назад
Комментарии (0)
Кликните на изображение чтобы обновить код, если он неразборчив