1. Instrukcja if else
Z programów byłoby mało pożytku, gdyby robiły to samo, niezależnie od tego, jak zmieniają się zewnętrzne okoliczności. Program musi umieć dostosowywać się do różnych sytuacji i wykonywać jedne działania w jednych przypadkach, inne — w innych.
W Javie realizuje się to za pomocą instrukcji warunkowej — słów kluczowych if i else, które pozwalają wykonywać różne bloki poleceń w zależności od prawdziwości warunku.
Instrukcja warunkowa składa się z trzech części: warunku, polecenia 1 i polecenia 2. Jeśli warunek jest prawdziwy, wykonywane jest polecenie 1, w przeciwnym razie wykonywane jest polecenie 2. Polecenia nigdy nie są wykonywane jednocześnie. Ogólny wygląd tej instrukcji jest następujący:
if (warunek)
polecenie1;
else
polecenie2;
if-else
if tłumaczy się jako „jeśli”, a else jako „w przeciwnym razie”. Ludzkim językiem można to zapisać tak:
Jeśli warunek jest prawdziwy, to
wykonaj polecenie1;
w przeciwnym razie
wykonaj polecenie2;
if-else ludzkim językiem
Przykłady:
// Na ekran zostanie wypisany tekst: Jesteś jeszcze dzieckiem
int age = 17;
if (age < 18)
System.out.println("Jesteś jeszcze dzieckiem");
else
System.out.println("Jesteś już dorosły");
// Na ekran zostanie wypisany tekst: Ciepło
int temperature = 5;
if (temperature < 0)
System.out.println("Na dworze mróz");
else
System.out.println("Ciepło");
// Na ekran zostanie wypisany tekst: Możesz zdawać na prawo jazdy
int age = 18;
if (age == 18)
System.out.println("Możesz zdawać na prawo jazdy");
else
System.out.println("Możesz odkładać na samochód");
2. Blok poleceń
Jeśli przy spełnieniu (lub niespełnieniu) warunku chcesz, aby program wykonał kilka poleceń, można je połączyć w blok poleceń.
Aby połączyć polecenia w blok, trzeba „owinąć” je klamrami. Oto jak wygląda to w ogólnym przypadku:
{
polecenie1;
polecenie2;
polecenie3;
}
Poleceń w bloku może być dowolnie wiele. Nawet zero.
Przykłady połączenia instrukcji if-else i bloku poleceń:
// Na ekran zostanie wypisany tekst: Jesteś jeszcze dzieckiem. Nie kłóć się z dorosłymi
int age = 17;
if (age < 18)
{
System.out.println("Jesteś jeszcze dzieckiem");
System.out.println("Nie kłóć się z dorosłymi");
}
else
{
System.out.println("Jesteś już dorosły");
System.out.println("No ta dzisiejsza młodzież");
}
// Na ekran zostanie wypisany tekst: Ciepło
int temperature = 5;
if (temperature < 0)
{
System.out.println("Na dworze mróz");
System.out.println("Załóż czapkę");
}
else
System.out.println("Ciepło");
// Wykonany zostanie pusty blok poleceń. Na ekran nic nie zostanie wypisane.
int age = 21;
if (age == 18)
System.out.println("Możesz otrzymać prawo jazdy");
else
{
}
3. Skrócona składnia instrukcji if
Jeśli kod w bloku else nie występuje, można go pominąć. Wtedy instrukcja if ma postać:
if (warunek)
{
polecenie1;
}
if
Przykład:
int age = 19;
if (age >= 18)
{
System.out.println("Jesteś pełnoletni!");
}
Jak to działa?
Jeśli warunek jest prawdziwy, wykonywany jest blok kodu. Jeśli fałszywy, nic się nie dzieje — program idzie dalej.
Blok else w programie istnieje, ale jest pusty (między klamrami nie ma żadnych poleceń). Można go po prostu usunąć — w programie nic się od tego nie zmieni.
4. Łączenie warunków: else if
Czasem trzeba sprawdzić nie tylko „tak/nie”, lecz wybrać spośród kilku wariantów. Wtedy pomaga konstrukcja else if:
if (warunek1)
{
// Wykonuje się, jeśli warunek1 jest prawdziwy
}
else if (warunek2)
{
// Wykonuje się, jeśli warunek2 jest prawdziwy, a warunek1 — fałszywy
}
else
{
// Wykonuje się, jeśli żaden z warunków powyżej nie pasuje
}
Przykład:
int hour = 13;
if (hour < 12)
{
System.out.println("Dzień dobry!");
}
else if (hour < 18)
{
System.out.println("Dzień dobry!");
}
else
{
System.out.println("Dobry wieczór!");
}
Co się tutaj dzieje?
- Jeśli godzina jest mniejsza niż 12 — jest rano.
- Jeśli od 12 do 18 — jest dzień.
- Jeśli więcej — jest wieczór.
- Program wybiera tylko JEDNĄ z opcji! Gdy tylko któryś warunek pasuje — pozostałych nawet się nie sprawdza.
5. Ilustracja schematyczna: schemat blokowy rozgałęzienia
Tak to wygląda w postaci schematu blokowego:
A jeśli warunków jest kilka:
To bardzo przypomina rozwidlenia w grach fabularnych: pójdziesz w lewo — jedno, w prawo — co innego, prosto — jeszcze coś!
6. Jakie warunki można sprawdzać?
W okrągłych nawiasach po if musi znajdować się WYRAŻENIE LOGICZNE — którego wynik to true lub false.
Podstawowe operatory porównania:
| Operator | Znaczenie | Przykład |
|---|---|---|
|
Równe | |
|
Różne | |
|
Większe | |
|
Mniejsze | |
|
Większe lub równe | |
|
Mniejsze lub równe | |
Przykłady warunków:
if (number == 10)
if (age != 18)
if (temperature > 36)
if (balance <= 0)
Zwróć uwagę: = (pojedynczy znak) — to przypisanie. == (dwa znaki) — to porównanie. To jeden z najczęstszych błędów początkujących! Jeśli przez pomyłkę napiszesz:
if (x = 5) // BŁĄD!
— kompilator zaprotestuje — i bardzo słusznie.
7. Praca z łańcuchami w warunkach
Porównanie za pomocą == w Javie działa poprawnie dla liczb. Liczb zmiennoprzecinkowych lepiej nie porównywać przez ==, a łańcuchów znaków porównywać przez == nie wolno — dla łańcuchów używaj metody equals(), która porównuje zawartość łańcuchów (a nie referencje).
O subtelnościach porównywania łańcuchów porozmawiamy później. A jak poprawnie porównywać łańcuchy — w przykładzie poniżej:
String password = console.nextLine();
if (password.equals("qwerty")) // wywołujemy metodę equals() i przekazujemy do niej drugi łańcuch
{
System.out.println("Zalogowano!");
}
8. Cechy i niuanse:
Klamry: potrzebne czy nie?
Jeśli po if lub else jest tylko jedno polecenie, klamry można pominąć:
if (age > 18)
System.out.println("Masz więcej niż 18 lat!");
// Ale bezpieczniej ZAWSZE je pisać:
if (age > 18)
{
System.out.println("Masz więcej niż 18 lat!");
}
Wskazówka: zawsze pisz z klamrami. To uchroni przed masą błędów, zwłaszcza przy rozbudowie kodu.
Błędy logiczne: uważaj na warunki!
Jeśli napiszesz tak:
if (age > 18)
System.out.println("Masz więcej niż 18 lat!");
System.out.println("Witamy!");
To kompilator odczyta ten kod tak:
if (age > 18)
{
System.out.println("Masz więcej niż 18 lat!");
}
System.out.println("Witamy!");
Druga linia zawsze będzie wykonywana — klamry są potrzebne, aby obie linie znalazły się w tej samej „gałęzi”.
GO TO FULL VERSION