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.