Instrukcje warunkowe w Javie: if, else i switch

Zaktualizowano 22 października 2026

Dzięki instrukcjom warunkowym program w Javie podejmuje decyzje: w zależności od danych wejściowych wykonuje się jedna albo druga część kodu. Bez nich program idzie uparcie od góry do dołu, tak jak pierwsze przykłady z artykułu o wejściu i wyjściu w Javie.

if, else if, else

Po if w nawiasach okrągłych stoi warunek. Jeśli jest prawdziwy, wykonuje się blok w nawiasach klamrowych. W przeciwnym razie Java przechodzi do else if (kolejny warunek) albo else (wszystkie pozostałe przypadki). Java sprawdza od góry do dołu i wybiera tylko pierwszą pasującą gałąź.

Do porównań służą == (równe), != (różne), <, <=, > i >=.

import java.util.Scanner;
public class Main {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        int temperature = scanner.nextInt();        if (temperature < 0) {            System.out.println("Coat and scarf!");        } else if (temperature < 15) {            System.out.println("Take a jacket.");        } else {            System.out.println("T-shirt weather.");        }    }}
Wejście
12

Dla wejścia 12 warunek temperature < 0 jest fałszywy, a temperature < 15 prawdziwy, dlatego program wypisuje Take a jacket. Dla 15 oba warunki byłyby fałszywe i program trafiłby do else.

Wartości logiczne i ich łączenie

Warunek to wartość typu boolean: true albo false. Możesz zapisać go w zmiennej i łączyć z innymi:

  • a && b: oba muszą być prawdziwe (i)
  • a || b: co najmniej jeden musi być prawdziwy (lub)
  • !a: odwraca wartość (nie)

&& wiąże silniej niż ||. W razie wątpliwości dodaj nawiasy, wtedy kod jest też czytelniejszy.

Teksty porównujesz metodą equals, a nie ==: command.equals("stop"). Więcej na ten temat znajdziesz w artykule o Stringach w Javie.

public class Main {    public static void main(String[] args) {        int hour = 14;        boolean weekend = false;        boolean holiday = true;
        boolean openingHours = hour >= 9 && hour < 18;        boolean open = openingHours && !(weekend || holiday);        System.out.println("Opening hours: " + openingHours);        System.out.println("Library open: " + open);
        String command = "stop";        System.out.println(command.equals("stop"));    }}

switch

Gdy sprawdzasz jedną zmienną względem kilku stałych wartości, switch jest czytelniejszy niż długi łańcuch else if. Każdy przypadek stoi po case, a po strzałce -> piszesz, co ma się stać. Kilka wartości oddzielasz przecinkami. default obejmuje wszystkie pozostałe wartości. switch działa z liczbami całkowitymi, z tekstami i z typami wyliczeniowymi (enum) w Javie.

switch może też zwracać wartość (wyrażenie switch). Wtedy stoi po prawej stronie = albo po return, kończy się średnikiem i potrzebuje przypadku dla każdej możliwej wartości, zwykle przez default.

import java.util.Scanner;
public class Main {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        String day = scanner.nextLine();        switch (day) {            case "Saturday", "Sunday" -> System.out.println("Weekend!");            case "Friday" -> System.out.println("Almost weekend.");            default -> System.out.println("Lectures.");        }
        int month = 4;        String season = switch (month) {            case 12, 1, 2 -> "winter";            case 3, 4, 5 -> "spring";            case 6, 7, 8 -> "summer";            default -> "autumn";        };        System.out.println("Month " + month + " is in " + season + ".");    }}
Wejście
Friday

Typowe błędy

  • = zamiast ==

    = przypisuje wartość, == porównuje. Kompilator odrzuca if (age = 18) z komunikatem incompatible types: int cannot be converted to boolean.

  • Porównywanie tekstów przez ==

    W przypadku tekstów == sprawdza, czy to ten sam obiekt, a nie czy litery są takie same. Przy wczytanych tekstach wynik często jest false, choć wyglądają identycznie. Zawsze używaj equals:

    if (answer.equals("yes")) { ... }
  • Średnik po if

    if (x > 10); to warunek z pustą instrukcją. Blok za nim wykonuje się wtedy zawsze. Nawias klamrowy powinien stać bezpośrednio po nawiasie okrągłym.

  • Zła kolejność

    Przy else if wygrywa pierwsza pasująca gałąź. Jeśli if (points >= 50) stoi przed else if (points >= 90), druga gałąź nigdy nie zostanie osiągnięta. Najpierw sprawdzaj węższy warunek.

  • Brak default w wyrażeniu switch

    Jeśli switch zwraca wartość, każda możliwa wartość musi być obsłużona. Bez default kompilator zgłasza the switch expression does not cover all possible input values.

Zadania z tego tematu

Przećwicz to, czego się nauczyłeś, od razu w przeglądarce. Testy natychmiast sprawdzają twoje rozwiązanie.

Powiązane artykuły