CodeGym /Kursy /JAVA 25 SELF /Zagnieżdżone if, logika wielopoziomowa

Zagnieżdżone if, logika wielopoziomowa

JAVA 25 SELF
Poziom 3, Lekcja 2
Dostępny

1. Podstawowa składnia zagnieżdżonego if

W prawdziwym życiu rzadko spotyka się sytuację, gdy decyzję podejmuje się tylko według jednego kryterium. Zwykle trzeba sprawdzić od razu kilka warunków i często zależą one od siebie. Na przykład, aby dostać się na koncert, nie wystarczy być po prostu dorosłym — czasem trzeba też być na liście zaproszonych. Tutaj wkracza tak zwana logika wielopoziomowa, a pomagają nam w tym zagnieżdżone operatory if.

Zagnieżdżone warunki to sytuacja, gdy jeden if „żyje” wewnątrz innego. Wyobraź sobie pudełko w pudełku: jeśli warunek zewnętrzny się spełni, dopiero wtedy sprawdzany jest wewnętrzny. To potężne narzędzie sterowania przepływem.

Zacznijmy od prostego:

if (conditionA)
{
    // działania, gdy conditionA — true (prawda)
    if (conditionB)
    {
        // działania, gdy oba warunki są prawdziwe
    }
}
Zagnieżdżony if wewnątrz innego if

Jeśli przypomina ci to matrioszkę — rozumiesz to właściwie! Wewnętrzny if wykona się tylko wtedy, gdy zadziałał zewnętrzny.

Przykład: wejście do klubu

Rozwińmy naszą aplikację edukacyjną, w której użytkownik wcześniej wprowadzał imię i wiek. Teraz dodamy drugi poziom weryfikacji: załóżmy, że aby dostać się do zamkniętego klubu, trzeba mieć co najmniej 21 lat i posiadać kod zaproszenia.

System.out.print("Wprowadź swoje imię: ");
String name = console.nextLine();

System.out.print("Wprowadź swój wiek: ");
int age = console.nextInt();

if (age >= 21)
{
    System.out.print("Wprowadź kod zaproszenia: ");
    String code = console.nextLine();

    if (code.equals("VIP2024"))
    {
        System.out.println("Witamy, " + name + ", w klubie VIP!");
    }
    else
    {
        System.out.println("Przykro nam, nieprawidłowy kod. Dostęp zabroniony.");
    }
}
else
{
    System.out.println("Niestety, wstęp tylko od 21 lat!");
}

Zwróć uwagę: wewnętrzny if sprawdza kod tylko wtedy, gdy wiek już przeszedł weryfikację. To oszczędza zasoby (i nerwy ochroniarza).

2. Ile poziomów zagnieżdżenia jest dopuszczalne?

Technicznie — ile chcesz. W praktyce jednak: im więcej poziomów zagnieżdżenia, tym trudniej czytać i utrzymywać kod. Zwykle stara się ograniczać do 2–3 poziomów. Jeśli powstaje „schodki” z 4+ zagnieżdżonych if, zastanów się, czy nie da się uprościć logiki albo wynieść sprawdzeń do metod.

Zagnieżdżona logika: wizualizacja

3. Zagnieżdżone if i else: pułapki i niuanse

Błąd początkujących: nieuważne użycie nawiasów klamrowych.

W Javie przy użyciu else obowiązuje twarda zasada: bez nawiasów klamrowych {} do if lub else należy tylko pierwsza instrukcja po nich. To częste źródło przykrych błędów.

Przykład z potencjalnym błędem:

if (age >= 21)
    if (code.equals("VIP2024"))
        System.out.println("Witamy!");
else
    System.out.println("Nieprawidłowy kod.");

Wielu oczekuje, że else odnosi się do sprawdzenia wieku, ale w rzeczywistości odnosi się do najbliższego poprzedzającego go if (sprawdzenia kodu zaproszenia). Dlatego komunikaty mogą wyświetlać się nie tak, jak oczekiwano. Lepiej zawsze używać nawiasów — nawet jeśli w środku jest tylko jedna linia!

Aby nie było nieporozumień, kompilator widzi ten kod tak:

if (age >= 21)
{    
    if (code.equals("VIP2024"))
        System.out.println("Witamy!");
else
    System.out.println("Nieprawidłowy kod.");
}    

Ważne! Jeszcze raz: jeśli w konstrukcji if-else nie ma nawiasów klamrowych, else odnosi się do poprzedniego (najbliższego mu) if.

4. Alternatywy: else if w zagnieżdżonych warunkach

Czasem wewnątrz zewnętrznego if chcemy nie tylko sprawdzić dodatkowy warunek, ale też przewidzieć alternatywę. Na przykład, jeśli kod zaproszenia nie pasuje, można zaproponować tryb gościa albo odmówić dostępu.

if (age >= 21)
{
    System.out.print("Wprowadź kod zaproszenia: ");
    String code = console.nextLine();

    if (code.equals("VIP2024"))
    {
        System.out.println("Witamy w klubie!");
    }
    else if (code.equals("GUEST"))
    {
        System.out.println("Tryb gościa: dostęp tylko do 23:00.");
    }
    else
    {
        System.out.println("Niestety, dostęp jest niemożliwy.");
    }
}
else
{
    System.out.println("Wstęp tylko od 21 lat.");
}

Tutaj wewnątrz zewnętrznego wyboru dokonujemy zagnieżdżonego wyboru między trzema scenariuszami: kod VIP, kod gościa i odmowa.

5. Praktyka: kalkulator zniżki z logiką wielopoziomową

Załóżmy, że użytkownik otrzymuje zniżkę na podstawie wieku i posiadania karty klubowej.

  • Jeśli wiek użytkownika jest większy lub równy 60 — zniżka 15 %.
  • Jeśli wiek jest mniejszy, ale użytkownik ma kartę klubową — zniżka 7 %.
  • W pozostałych przypadkach zniżki brak.

Jak to zapisać?

System.out.print("Wprowadź swój wiek: ");
int age = console.nextInt();

double discount = 0.0;

if (age >= 60)
{
    discount = 0.15;
}
else
{
    System.out.print("Czy masz kartę klubową (tak/nie)? ");
    String hasCard = console.nextLine();

    if (hasCard.equals("tak"))
    {
        discount = 0.07;
    }
}

System.out.println("Twoja zniżka: " + (discount * 100) + "%");

Tutaj użyliśmy zagnieżdżonego if wewnątrz gałęzi else: jeśli wiek nie spełnił warunku, dopiero wtedy pytamy o kartę.

1
Zadanie
JAVA 25 SELF, poziom 3, lekcja 2
Niedostępne
Kontrola wejścia na imprezę 🥳
Kontrola wejścia na imprezę 🥳
1
Zadanie
JAVA 25 SELF, poziom 3, lekcja 2
Niedostępne
Wejście do klubu 🌃
Wejście do klubu 🌃
1
Zadanie
JAVA 25 SELF, poziom 3, lekcja 2
Niedostępne
Zaproszenia na konferencję 🎤
Zaproszenia na konferencję 🎤
1
Zadanie
JAVA 25 SELF, poziom 3, lekcja 2
Niedostępne
Program lojalnościowy w sklepie 🛍️
Program lojalnościowy w sklepie 🛍️
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION