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ście12
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ścieFriday
Typowe błędy
= zamiast ==
=przypisuje wartość,==porównuje. Kompilator odrzucaif (age = 18)z komunikatemincompatible 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 jestfalse, choć wyglądają identycznie. Zawsze używajequals: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 ifwygrywa pierwsza pasująca gałąź. Jeśliif (points >= 50)stoi przedelse if (points >= 90), druga gałąź nigdy nie zostanie osiągnięta. Najpierw sprawdzaj węższy warunek.Brak default w wyrażeniu switch
Jeśli
switchzwraca wartość, każda możliwa wartość musi być obsłużona. Bezdefaultkompilator zgłaszathe 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
- PętlePętle w Javie w prosty sposób: for, while, do-while, break i continue z przykładami. Do tego typowe błędy, które kosztują punkty na kolokwium.Czytaj artykuł
- Wejście i wyjścieWejście i wyjście w Javie w prosty sposób: wypisuj wartości przez println i printf, wczytuj liczby Scannerem. Z przykładami i typowymi błędami.Czytaj artykuł
- StringiStringi w Javie w prosty sposób: substring, charAt, split, equals i StringBuilder z przykładami. Do tego typowe błędy, np. porównywanie przez ==.Czytaj artykuł