Урок J-8. Java логические и условные операторы (if, if-else и switch)

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

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

В конце урока предложены упражнения для закрепления материала.

Конструкция 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. Пример:

String str1 = new String("Привет");
String str2 = new String("Привет");
String sameStr = str1;

boolean b1 = str1 == str2; // b1 - false, потому что str1 и str2 это 2 разных объекта
boolean b2 = str1.equals(str2); // b2 - true, потому что str1 и str2 логически эквивалентны
boolean b3 = str1 == sameStr; // b3 -true, потому что str1 и sameStr в действительности один и тот же объект

Условный оператор 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);

Упражнения на тему Условные операторы в Java:

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

Комментарии и пинги к записи запрещены.

Комментариев к записи: 144

  1. Сергей:

    Постановка второго задания не однозначна.
    Что значит максимальные числа, числа которые больше искомого минимума или что-то другое?

    • Мария (admin):

      Поясню на примере. Даны числа 3 8 1 8. Максимальное число здесь 8, встречается 2 раза. Значит программа должна вывести 2.

Пирсон (1 сезон)
Все материалы сайта study-java.ru являются результатом труда его авторов. Копирование материалов в некоммерческих целях без указания источника в виде прямой ссылки на сайт study-java.ru запрещено. Использование материалов в коммерческих целях разрешено только с письменного согласия автора. Нарушение авторских прав преследуется по закону.