Operatory logiczne

Skoro mamy już opanowane operatory matematyczne to czas na zapoznanie się z operatorami logicznymi. Operatorami, które zwracają tylko dwa stany – prawdę lub fałsz. Niczym się nie martw, większość z nich znasz z lekcji matematyki z podstawówki.

Ruszamy!

Oczywiście rozpoczniemy z pustą funkcją i klasą Main.

package pl.maniaq;

public class Main {

    public static void main(String[] args) {
    }
}

Zanicjalizujemy sobie tym razem kilka zmiennych, na których będziemy używać operatorów logicznych.

Jakieś dwie liczby:

int firstValue = 0;
int secondValue = 10;

Typ boolean

boolean isMale = true;

Oraz dwa ciągi znaków – dwa imiona

String firstName = "Kamil";
String secondName = "Pablo";

Mając taki kod, możemy przejść dalej.

package pl.maniaq;

public class Main {

    public static void main(String[] args) {
        int firstValue = 0;
        int secondValue = 10;

        boolean isMale = true;

        String firstName = "Kamil";
        String secondName = "Pablo";
    }
}

Negacja !

Negacja jest specyficznym operatorem – jest jednoargumentowy, tzn. że przyjmuje tylko jeden argument – jedną zmienną.

Negacja neguję nam stan logiczny – inaczej mówiąc zmienia. Jeżeli mamy prawdę to neguję ją na fałsz i odwrotnie – z fałszu na prawdę.

Użyjmy naszej negacji na zmiennej isMale.

boolean isFemale = !isMale;

Oraz wypiszmy rezultat operatora na ekran konsoli.

System.out.println("Is female: " + isFemale);

Po uruchomieniu programu otrzymujemy coś takiego w konsoli:

Is female: false

Wszystko się zgadza – negacja wzięła zmienną isMale – która jest true i zmieniła jej stan na przeciwny – czyli na false – tak jak widzimy na ekranie konsoli.

Zastosowanie negacji pokażę również w kolejnych operatorach.

Operator ==

Kolej na operator == – służy on do porównywania dwóch zmiennych, mogą to być liczby lub ciągi znaków.

Zwraca on prawdę jeżeli dwie zmienne są sobie równe, zaś fałsz, gdy są różne.

Przetestujmy, więc ten operator w praktyce. Sprawdźmy czy dwie liczby są sobie równe.

boolean numbersAreEqual = firstValue == secondValue;

Wynik operatora logicznej zapisujemy do zmiennej typu boolean – czyli otrzymamy true lub false.

Wypiszmy sobie wynik na ekran konsoli.

System.out.println("0 and 10 are equal: " + numbersAreEqual);

I takim o to sposobem w ekranie konsoli m.in. otrzymujemy:

0 and 10 are equal: false

Czyli się zgadza, liczby 0 i 10 nie są sobie równe.

Operator !=

Przeciwieństwem operator == jest operator !=, który zwraca prawdę jeżeli dwie wartości nie są sobie równe. Fałsz, gdy wartości są równe.

Przejdźmy, więc do zaimplementowania operatora w naszym kodzie od razu wyświetlając wynik jego działania.

boolean numbersIsNotEqual = firstValue != secondValue;
System.out.println("0 and 10 are not equal: " + numbersIsNotEqual);

Po uruchomieniu programu w konsoli otrzymamy:

0 and 10 are not equal: true

Warto zauważyć, że operator != możęmy zastąpić dwoma operatorami tj. operator == i negację. Operator == sprawdzi nam czy dwie wartości są równe – jeżeli ten wynik zanegujemy to dostaniemy rezultat działania operatora !=.

numbersIsNotEqual = !(firstValue == secondValue);
System.out.println("0 and 10 are not equal: " + numbersIsNotEqual);

Po uruchomieniu programu rezultat działa jest taki sam:

0 and 10 are not equal: true

Operator > i <

Do sprawdzenia czy dwie wartości są od siebie mniejsze lub większe możemy użyć operator mniejszy “<” lub większy “>”.

Pierwszy z nich będzie zwracał prawdę, gdy lewa wartość będzie mniejsza, drugi zaś, gdy prawa wartość będzie większa. Nic trudnego – tak jak w matematyce w podstawówce.

Rozpocznijmy od operatora >

boolean numberIsHigherThanTen = firstValue > 10;
System.out.println("0 is higher than 10: " + numberIsHigherThanTen);

Ze względu, że 0 (firstValue) jest mniejsze od 10 to otrzymujemy fałsz.

0 is higher than 10: false

Kolejnym operatorem jest operator <.

boolean numberIsLowerThanTen = firstValue < 10;
System.out.println("0 is lower than 10: " + numberIsLowerThanTen);

0 jest większe od 10, więc otrzymujemy true.

0 is lower than 10: true

Zostały jeszcze nam dwa operatory – przejdźmy, więc do nich!

Operator >= i <=

Tak jak w matematyce, odpowiadają one nierównościom: mniejszy/większy bądź równy.

Przejdźmy lepiej od razu do przykładów, na początku weźmy na ruszt operator >=. Sprawdzimy czy zmienna secondValue jest dodatnia.

boolean valueIsNoNegative = firstValue >= 0;
System.out.println("Value is not negative: " + valueIsNoNegative);

Ze względu, że firstValue jest równa 0 to otrzymujemy prawdę.

Value is not negative: true

Czas na operator <= – sprawdzimy czy secondValue jest mniejsza bądź równa 10.

boolean numberIsLowerOrEqualThanThen = secondValue <= 10;
System.out.println("10 is lower or equal than 10: " + numberIsLowerOrEqualThanThen);

Ze względu, że secondValue jest równa 10 to otrzymujemy prawdę.

10 is lower or equal than 10: true

Porównywanie Stringów

Na początku zauważyłeś, że zadeklarowaliśmy dwie zmienne typu String: firstName, secondName. Przy użyciu operator == operatora != możemy sprawdzić czy dwa imiona faktycznie są sobie równe, lub nie.

Pokażmy tylko użycie operatora == ze Stringiem.

boolean namesAreEqual = firstName == secondName;
System.out.println("Names are equal: " + namesAreEqual);

Po uruchomieniu w konsoli otrzymujemy:

Names are equal: false

W tej sytuacji po użyciu operatora != otrzymamy prawdę – ponieważ Stringi są różne od siebie.

Operator &&

Na koniec zostały nam jeszcze do omówienia dwa operatory logiczne – tych już nie spotkałeś na matematyce w podstawówce. 😉

Pierwszy z nich to && – tzw. AND. Służy on do łączenia warunków logicznych dając ostatecznie prawdę lub fałsz. Przejdźmy od razu najlepiej do przykładu.

boolean numberIsInRange = secondValue >= 0 && secondValue <= 20;

System.out.println(secondValue + " is in range from 0 to 20: " + numberIsInRange);

Przy użyciu operatora && połączyliśmy dwa inne warunki logiczne – jednak jak zachowuję sie operator AND?

Operator AND zwraca prawdę tylko wtedy, gdy oba warunki są prawdziwe!

Jeżeli, więc secondValue jest większe bądź równe 0 mniejsza bądź równe 20 to wtedy zwróci prawdę.

10 is in range from 0 to 20: true

Co się absolutnie zgadza – wniosek jest prosty, jeżeli mamy dwie prawdy to operator && zwróci prawdę – w przeciwnym wypadku zawsze zwróci fałsz!

Operator ||

Kolejnym operator jest tak zwany operator OR (lub) – jest mniej rygorystyczny, wystarczy, że wystąpi jedna prawda to zwraca prawda! Jeżeli mamy same fałsze to zwróci nam również fałsz!

boolean numberEqualsZeroOrTwenty = secondValue == 0 || secondValue == 20;
System.out.println("Number is equal to zero or twenty: "+numberEqualsZeroOrTwenty);

W naszym przypadku jeżeli secondValue jest równe 0 lub 20 to powinniśmy otrzymać prawdę.

Number is equal to zero or twenty: false

Otrzymujemy fałsz, ponieważ secondValue jest równe 10 – żaden, więc warunek nie został spełniony – operator || zwrócił fałsz.

Podsumowanie

W tej lekcji poznałeś wszystkie operatory logiczne, dzięki którym możesz w łatwy sposób sprawdzić czy dwie zmienne są sobie równe, różne – a może w przypadku liczb, sprawdzić czy jedna liczba jest mniejsza od drugiej? Dodatkowo możesz łączyć takie warunki przy użyciu operatorów AND lub OR.

Aby przećwiczyć poznane operatory zachęcam Cię do rozwiązania poniższych zadań.

  1. Na podstawie liczby podanej przez użytkownika wypisz użytkownikowi następujące informacje:
      • Podana liczba jest większa od 10: (true/false)
      • Podana liczba jest równa 0: (true/false)
      • Podana liczba jest mniejsza 50: (true/false)
      • Podana liczba jest większa bądź równa 20: (true/false)
      • Podana liczba jest mniejsza bądź równa 30: (true/false)
      • Podana liczba jest różna od 5: (true/false)
  2. Na podstawie liczby podanej przez użytkownika sprawdź czy liczba mieści się w przedziale od 100 do 200. Wynik wypisz na ekran konsoli.
  3. Na podstawie liczby podanej przez użytkownika sprawdź czy liczba jest równa liczba 100 lub 200. Wynik wypisz na ekran konsoli.
  4. Na podstawie liczby podanej przez użytkownika sprawdź czy liczba jest większa, mniejsza bądź równa 0.
  5. Na podstawie liczby podanej przez użytkownika sprawdź czy liczba mieści się w przedziale od -100 do 100.
  6. Na podstawie liczby podanej przez użytkownika sprawdź czy liczba mieści się w przedziale od minus nieskończoności do -100 lub od 100 do nieskończoności.

Pamiętaj o tym, aby wszystkie nazwy zmiennych zapisywać w języku angielskim!

Rozwiązania wszystkich zadań możesz znaleźć tutaj.

Skoro umiesz tworzyć już warunki logiczne to czas ich użyć w instrukcjach warunkowych i sterujących!

Kamil Klimek

Od 2016 jestem programistą Java. Przez pierwsze 4 lata pracowałem jako Full Stack Java Developer. Później postanowiłem postawić nacisk na Javę, żeby jeszcze lepiej ją poznać.

Subscribe
Powiadom o
guest
4 komentarzy
najstarszy
najnowszy oceniany
Inline Feedbacks
View all comments
Poul
Poul
5 lat temu

Pewnie będzie o tym później, ale warto wspomnieć, że Stringów nie zawsze da się porównać operatorem logicznym ==, ponieważ String jest obiektem, i jeżeli tworzymy nowy obiekt to musimy go porównać poprzez metodę equals().

Kamil Klimek
Kamil Klimek
5 lat temu
Reply to  Poul

Tak to prawda, nie zawsze się da – można zawsze używać == do porównywania Stringów, gdy String został zainicjalizowany bez użycia operatora new.

Prawdopodobnie będę jeszcze o tym wspominał – chociaż niedawno pojawił się na ten temat wpis na blogu: https://1024kb.pl/programowanie/java/porownania-java/ 😉

Ula Ł
Ula Ł
5 lat temu

Jest błąd w treści zadania 6 albo w jego rozwiązaniu. Treść sugeruje przedziały (- nieskonczonosc, 100) || (100, +nieskonczonosc) a w rozwiązaniu jest (- nieskonczonosc, -100) || (100, +nieskonczonosc). Niemniej obydwa przypadki bardzo ciekawe 😉

Kamil Klimek
Kamil Klimek
5 lat temu
Reply to  Ula Ł

Niestety wkradł się błąd w treści zadania, przedział ma być: (-nieskończoność; -100) i od (100; nieskończoności) – zamiast dwukrotnie liczba dodatnia 100. 😉

4
0
Would love your thoughts, please comment.x