JavaRush /Курси /Java Syntax Zero /Особливості роботи умовного оператора

Особливості роботи умовного оператора

Java Syntax Zero
Рівень 3 , Лекція 4
Відкрита

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
   }
}
Виведення на екран мінімального з двох чисел
Коментарі (17)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
hidden #3500645 Рівень 30
1 жовтня 2024
Підкажіть по прикладу з подвійним 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("Можна не працювати");
}
Чи вірно розумію, у цьому прикладі задано розглядати тільки числа в діапазоні до 60: if (age < 60) і далі для них виконувати умову

   if (age > 20)
      System.out.println("Треба працювати");
else
   System.out.println("Можна не працювати");
Тобто числа, що більші за 60 програма взагалі виходить не розглядає? Бо в мене консоль пуста при виконанні виходить
Anonymous #3429450 Рівень 8
6 листопада 2024
ну фактично так. Програма перевірила умови, жодна умова не підійшла, але код закінчився, тому ніякі команди виконані не були...
hidden #3500645 Рівень 30
7 листопада 2024
дякую) я просто не дуже зрозуміла тоді як працює умова if всередині іншої умови if і яка послідовність виконання, але вже розібралася
Anonymous #3398391 Рівень 4
21 лютого 2024
Я не маю premium, але написав з нуля программу, про яку йшла мова в задачі, приведенної вище:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int age = s.nextInt();
        if (age >= 6 && age <= 17)
            System.out.println("Вас вже чекають в школі");
        else if (age >= 18 && age <= 23)
                System.out.println("Час йти до інституту");
        else
                System.out.println("Ви вже занадто дорослий");
    }
}
Ва Дим Рівень 28
2 березня 2024
Не згідний з else.
hidden #3500645 Рівень 30
1 жовтня 2024
Майже все вірно, але з else трошки помилка виходить, бо, наприклад, якщо ввести число 5, вік дитини 5 років, а покаже "Ви вже занадто дорослий". Тоді вже потрібно ще одну умову додати, що якщо вік менший за 6 років, виводити, наприклад, "Ти ще занадто маленький". І так як йде мова про вік, то потрібно обмежити введення від'ємних чисел. Ось так наче працює вірно:

package javarush;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int age = s.nextInt();
        if (age >= 6 && age <= 17)
            System.out.println("Вас вже чекають в школі");
        else if (age >= 18 && age <= 23)
                System.out.println("Час йти до інституту");
        else if (age < 6 && age > 0)
            System.out.println("Ти ще занадто маленький");        
        else
                System.out.println("Ви вже занадто дорослий");
        s.close();
    }
}

Peace The Ball Рівень 32
25 вересня 2022
public class Solution { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int age = scanner.nextInt(); if (age < 18) { if (age > 5) { System.out.println("треба ходити до школи"); } } else { System.out.println("час до інституту"); } } } Увага, запитання: для чого потрібно брати у фігурні дужки System.out.println обидва рази. Геть не розумію що це дає? В попередньому матеріалі ніде не пояснювалося як працюють фігурні дужки...
Grimnir Рівень 9
5 листопада 2022
Так і не потрібно стільки, в задачі достатньо додати одну пару {}
Roma Chernesh Рівень 16
11 листопада 2022
У фігурні дужки не потрібно обидва рази брати System.out.println Дужки у данному випадку працюють, як дужки у математичних прикладах: Що їми виділив, то опрацьовується першим 1 + ( 2 - 3 ), де спочатку іде віднімання, а потім додавання. Так і у програмуванні, код виділений дужками {} опрацьовується окремо від іншого. Кожному if і else пишеться пара {}. Наприклад: if(20 >=15) //якщо умова виконується (true) { то виконується ця умова; } else //інакше, якщо if помилковий { то виконується це; } І так можна скільки завгодно, можна один if влагоджувати в інший і т.д. Якщо все ще не зрозуміло, то от гугл у поміч;)
Peace The Ball Рівень 32
14 листопада 2022
Господи боже! Товариство, я вже давно пройшов той матеріал і всьо поняв про дужки, просто треба було дальше читати лекції, там все ясно стає само собою. Я вже і забув, шо таку фігню питався колись. Ну і в будь якому випадку я вдячний всім, хто відгукнувся на мій коментар, щиро дякую за підтримку, друзі
Ivanka K Рівень 3
21 вересня 2022
цікаво працюють дужки, жаль, що в лекції цього не пояснили, було лише інше пояснення про них
Aleksey Gusev Рівень 4
15 червня 2022
Хитренькие
YOF Рівень 8
31 травня 2022
Код не работает, проигрался где-то 2 часа, пробовал даже в точь списывать как на примере, ничего не работает. Всегда выдает ответ, где (int > 0), даже если я писал в консоле число меньше нуля.
Andrij Mochulsky Рівень 4
15 серпня 2022
незрозуміло до чого цей коментар( до якого коду?
Unfo Рівень 23
24 серпня 2022
це до завдання зі "школа - інститут" ?
Pan Vitali Moroz Рівень 51
1 вересня 2022
Чому я не дивуюсь якщо такі пости російською
Roma Chernesh Рівень 16
11 листопада 2022
Та ну, при чому тут російська? Просто людина щось не зрозуміла та не по темі пише