JavaLessons

Логические и условные операторы (if, if-else и switch)

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

В этом уроке мы рассмотрим:

Как применяются условные операторы if, if-else и switch. Какие существуют Логические операторы в Java. В чем отличие между оператором == и методом equals при сравнении. Какие возможны сокращения для конструкции if-else. В конце урока предложены упражнения для закрепления материала.

Конструкция if-else имеет следующий вид:

if (логическое_выражение) {
    //блок кода 1
}
else{
    //блок кода 1
}

Блок else не является обязательным.

Логическое выражение это выражение (или переменная), возвращающее значение типа boolean.

Пример:

boolean b = true; 
if (b) {
    System.out.println("b - истина");
}

Логические операторы в Java.

В логическом выражении могут использоваться следующие логические операторы: ==, !=,<=,>=,>,<, &&,||,! .

Рассмотрим на примере:

int a = 4;
int b = 5;
boolean result;
result = a == b // a равно b - false 
result = a != b // a не равно b - true
result = a < b; // a меньше b - true
result = a > b; // a больше b - false
result = a <= 4 // a меньше или равно 4 - true
result = b >= 6 // b больше или равно 6 - false
result = a > b || a < b // (a больше b) логическое или (a меньше b) - true
result = 3 < a && a < 6 // (3 меньше a) логическое и(a меньше 6) - true
result = !result // логическое нет - false

Отличие == и equals

Оператор == работает иначе на объектных типах данных, нежели на примитивных. Когда мы используем объекты и хотим проверить их равенство, то оператор == укажет нам лишь на то, являются ли объекты одними и теми же или нет. Если же необходимо проверить логическое равенство объектов, то следует использовать метод equals. Пример

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

Если логическое выражение в скобках правдиво, то выполняется , блок кода в фигурных скобках {} после if. Если логическое выражение принимает значение false, то ничего не происходит.

if (a == b) {
    //Если a равно b - выводим сообщение
    System.out.println("a и b равны!");
}

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

Конструкция if-else отличается от предыдущей тем, что если логическое выражение в круглых скобках принимает значение false, то выполняется блок кода, находящийся в фигурных скобках после ключевого слова else

if (a == b) {
    //Если a равно b - выводим сообщение
    System.out.println("a и b равны!");
}
else{
    //Если a не равно b - выводим сообщение
    System.out.println("a и b не равны!");
}

Возможные сокращения if-else

  1. Если блоки кода if, else содержат лишь одну строку, то можно обойтись без использования фигурных скобок. Предыдущий пример можем записать так:
    if (a == b)
     System.out.println("a и b равны!");
    else
     System.out.println("a и b не равны!");
    
  2. Существует еще один способ сокращения оператора if-else при помощи оператора ? : . Запишем предыдущий пример следующим образом:
    System.out.println(a==b ? "a и b равны!" : "a и b не равны!");
    

    Общая форма записи условия выглядит следующим образом:

    Логическое_выражение ? Выражение1 : Выражение2
    

    Если Логическое_выражение принимает значение true, то выполняется Выражение1, а иначе — Выражение2. Внимание: при использовании этой конструкции два последних выражения должны иметь один и тот же тип.

    Условный оператор switch — case

    Условный оператор switch — case удобен в тех случаях, когда количество вариантов очень много и писать для каждого if-else очень долго. Конструкция имеет следующий вид :

     switch (выражение) {
       case значение1: 
         //блок кода 1;
         break;
       case значение2: 
         //блок кода 2;  
         break;
         ...  
       case значениеN: 
         //блок кода N;  
         break;  
       default:  
         блок N+1;
    }
    

    switch работает с такими примитивными типами данных как: byte, short, char, и int. Также с типами Enum, классом String и несколькими специальными классами-оболочками примитивных типов: Character, Byte, Short, Integer.

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

В следующем примере, для целочисленного значения, представляющего день недели, определяется его название в виде строки. Для значения 3, переменная dayString примет значение «Среда».

int day = 3;
    String dayString;
    switch (day) {
        case 1:  dayString = "Понедельник";
                 break;
        case 2:  dayString = "Вторник";
                 break;
        case 3:  dayString = "Среда";
                 break;
        case 4:  dayString = "Четверг";
                 break;
        case 5:  dayString = "Пятница";
                 break;
        case 6:  dayString = "Суббота";
                 break;
        case 7:  dayString = "Воскресенье";
                 break;
        default: dayString = "Ошибка";
                 break;
    }
    System.out.print(dayString);

Задания:

  1. Даны 4 числа типа int. Сравнить их и вывести наименьшее на консоль.
  2. Вывести на консоль количество максимальных чисел среди этих четырех.
  3. Даны 5 чисел (тип int). Вывести вначале наименьшее, а затем наибольшее из данных чисел.
  4. Даны имена 2х человек (тип String). Если имена равны, то вывести сообщение о том, что люди являются тезками.
  5. Дано число месяца (тип int). Необходимо определить время года (зима, весна, лето, осень) и вывести на консоль.

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