Spis treści
- Rozdział 4 - Instrukcje warunkowe
- Podstawy instrukcji warunkowych
- Operatory relacyjne
- Typ boolean
- Warunki instrukcji if
- Operatory warunkowe i operator logiczny !
- Tablica prawdy operatorów warunkowych
- Nawiasy i priorytety operatorów warunkowych
- Short-circuit evaluation
- Zagnieżdżanie instrukcji warunkowych
- Bloki kodu i zakresy zmiennych
- Instrukcja switch
- Trój-argumentowy operator logiczny
- Podsumowanie
- Pytania
- Zadania
Jednym z typów podstawowych języka Java, które poznaliśmy w rozdziale o zmiennych, był typ boolean.
Zmienne typu boolean mogą przechowywać tylko jedną z dwóch możliwych wartości – true bądź false:
public class ZlaWartoscBoolean { public static void main(String[] args) { boolean zmienna; // blad kompilacji // zmienna moze przechowywac tylko wartosc true/false! zmienna = 5; } }
Próba kompilacji powyższego programu zakończy się błędem, ponieważ zmienne typu boolean nie mogą przechowywać liczb:
Zmienne typu boolean przydają się do przechowywania informacji typu prawda/fałsz, np. czyUzytkownikZalogowany, czyLiczbaParzysta, czyZakonczycProgram.
Spójrzmy na przykład programu, który zapisuje w zmiennej typu boolean informację, czy podana przez użytkownika liczba jest parzysta, czy nie:
import java.util.Scanner; public class CzyLiczbaParzysta { public static void main(String[] args) { int liczba; boolean czyParzysta; System.out.println("Prosze podac liczbe:"); liczba = getInt(); if (liczba % 2 == 0) { czyParzysta = true; } else { czyParzysta = false; } System.out.println("Czy liczba parzysta: " + czyParzysta); } public static int getInt() { return new Scanner(System.in).nextInt(); } }
Po pobraniu od użytkownika liczby, korzystamy z operatora % (modulo, reszta z dzielenia) i wynik przyrównujemy do liczby 0:
if (liczba % 2 == 0) {
Jeżeli liczba jest parzysta, to operator % zwróci 0, które zostanie przyrównane do 0 i warunek będzie spełniony – w tym przypadku, zmiennej czyParzysta nadajemy wartość true. W przeciwnym razie, gdy liczba będzie nieparzysta, operator % zwróci 1, jako reszta z dzielenia, więc wykonana zostania instrukcja związana z sekcją else – zmiennej czyParzysta przypiszemy false.
Na końcu programu wypisujemy na ekran wartość zmiennej czyParzysta. Przykładowe wykonanie programu:
Powyższy program jest poprawny, ale moglibyśmy skorzystać z pewnej właściwości operatorów relacyjnych. Jak już wspomnieliśmy, operator relacyjny zwraca jedną z dwóch możliwych wartości: true bądź false.
Są to dokładnie takie same wartości, jakie może przechowywać typ boolean! Czy nie moglibyśmy w takim razie przypisać wyniku działania operatora relacyjnego do zmiennej typu boolean? Możemy – spójrzmy na przykład poniższego programu korzystającego z tej właściwości:
import java.util.Scanner; public class CzyLiczbaParzystaWersja2 { public static void main(String[] args) { int liczba; boolean czyParzysta; System.out.println("Prosze podac liczbe:"); liczba = getInt(); czyParzysta = liczba % 2 == 0; System.out.println("Czy liczba parzysta: " + czyParzysta); } public static int getInt() { return new Scanner(System.in).nextInt(); } }
W tej wersji programu, zamiast skorzystać z instrukcji warunkowej, przypisaliśmy do zmiennej czyParzysta wynik wyrażenia:
liczba % 2 == 0;
Wyrażenie to ma wartość false, jeżeli liczba jest nieparzysta, a wartość true, gdy liczba jest parzysta.
Możemy w ten sposób przypisywać do zmiennych typu boolean wyniki różnego rodzaju porównań korzystających z operatorów relacyjnych – spójrzmy na przykład:
public class TypBooleanOperatoryRelacyjne { public static void main(String[] args) { int pewnaLiczba = 100; int temperatura = 10; int innaLiczba = -1; int dzienTygodnia = 3; boolean czyUjemna; boolean czyJestCieplo; boolean czyRozneOdZero; boolean czySobota; czyUjemna = pewnaLiczba < 0; czyJestCieplo = temperatura >= 20; czyRozneOdZero = innaLiczba != 0; czySobota = dzienTygodnia == 6; } }
Do czterech zmiennych typu boolean przypisaliśmy wyniki porównywania kilku zmiennych do różnych wartości. Zwróćmy jeszcze raz uwagę, że do przyrównania wartości do innej wartości używamy dwóch znaków ==. Pojedynczy znak = to operator przypisania.