1. Последовательность if-ов

Иногда в программе нужно сделать много разных действий в зависимости от значения какой-то переменной или от значения какого-то выражения.

Допустим, задача звучит так:

  • Если температура выше 20 градусов — надеть рубашку
  • Если температура выше 10 градусов и меньше (или равна) 20 — надеть свитер
  • Если температура выше 0 градусов и меньше (или равна) 10 — надеть плащ
  • Если температура ниже 0 градусов — надеть пальто.

Как это можно представить в коде:

int temperature = 9;

if (temperature > 20)
   System.out.println("надеть рубашку");
else // тут температура меньше (или равна) 20
{
   if (temperature > 10)
      System.out.println("надеть свитер");
   else // тут температура меньше (или равна) 10
   {
      if (temperature > 0)
         System.out.println("надеть плащ");
      else // тут температура меньше 0
         System.out.println("надеть пальто");
   }
}

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

Но вышеприведенный пример интересен еще и тем, что именно в его случае фигурные скобки можно опустить, и код станет немного проще:

int temperature = 9;

if (temperature > 20)
   System.out.println("надеть рубашку");
else // тут температура меньше (или равна) 20
   if (temperature > 10)
      System.out.println("надеть свитер");
   else // тут температура меньше (или равна) 10
      if (temperature > 0)
         System.out.println("надеть плащ");
      else // тут температура меньше 0
         System.out.println("надеть пальто");

Хотя обычно такую конструкцию программисты записывают немного по-иному:

int temperature = 9;

if (temperature > 20)
   System.out.println("надеть рубашку");
else if (temperature > 10) // тут температура меньше (или равна) 20
   System.out.println("надеть свитер");
else if (temperature > 0) // тут температура меньше (или равна) 10
   System.out.println("надеть плащ");
else // тут температура меньше 0
   System.out.println("надеть пальто");

Все три приведенные примера эквивалентны.


2. Нюансы else

Важный момент:

Если в конструкции if-else не расставлены фигурные скобки, else относится к предыдущему (ближайшему к нему) if-у.

Пример:

Наш код Как он будет работать
int age = 65;

if (age < 60)
   if (age > 20)
      System.out.println("Надо работать");
else
   System.out.println("Можно не работать");
int age = 65;

if (age < 60)
{
   if (age > 20)
     System.out.println("Надо работать");
   else
     System.out.println("Можно не работать");
}

Если смотреть на код в левой части, кажется, что на экран будет выведена надпись «Можно не работать». Однако это не так. На самом деле else и команда «Можно не работать» относятся ко второму (ближайшему) if-у.

В коде справа красным выделены связанные if и else. Также специально расставлены скобки, однозначно показывающие порядок выполнения действий. Надпись Можно не работать никогда не выводится на экран при age больше 60 😛



3. Пример использования оператора if-else

Раз уж мы так хорошо разобрали оператор if-else, приведем пример:

import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
     Scanner console = new Scanner(System.in);  // создаем объект Scanner
     int a = console.nextInt();  // читаем с клавиатуры первое число
     int b = console.nextInt();  // читаем с клавиатуры второе число
     if (a < b)                   // если a меньше b
       System.out.println(a);     // выводим на экран a
     else                         // иначе
       System.out.println(b);     // выводим на экран b
   }
}
Вывод на экран минимального из двух чисел