„Witaj, Amigo! Tak mnie pochłonęło rozwiązywanie problemów logicznych, że nie zauważyłem, jak wszedłeś. Oto jedno dla ciebie: jeśli krokodyle latają, to śnieg jest biały. Jest latający krokodyl. Jaki jest wniosek?”
„Um… Więc dochodzimy do wniosku, że śnieg jest biały?”
„Wspaniale! Zdałeś egzamin wstępny. Jesteś gotowy, aby opanować następny temat. Nazywa się to „operatorami logicznymi”. Zaczniemy od logiki boolowskiej. Instynktownie już to wiesz. W końcu jesteś robotem . Musimy tylko dostosować ustawienia do języka Java”.
„Logika boolowska? Niedawno powiedziano mi o typie boolowskim…”
„Tak, jest tu bezpośredni związek. Wyrażenia boolowskie mogą być tylko prawdziwe lub fałszywe. I tak się składa, że ten rodzaj logiki polega na wyrażeniach, które są prawdziwe lub fałszywe, oraz kombinacjach takich wyrażeń. Na przykład wyrażenie 18 < 25 jest zawsze prawdą, a 7 < 5 jest zawsze fałszem. Wyrażenie (i < 10) zależy od wartości i. A jeśli wyrażenie ma np. wartość prawda, to możemy poprosić program o zrobienie czegoś”.
„Aha, rozumiem. Wyrażenia boolowskie pozwalają nam nie tylko wyciągać logiczne wnioski, ale także tworzyć rozwidlenia w programach”.
„Dokładnie. Najważniejsze jest, aby nauczyć się je pisać. Na przykład w Javie nie można po prostu przejść i napisać wyrażenia 18 < age <65
. Byłoby to niepoprawne składniowo i program się nie skompilował.
„Ale możesz napisać to tak:
(18 < age) AND (age < 65)
Oczywiście, tak naprawdę nie używamy angielskiego słowa AND
. Zamiast tego potrzebujesz operatora boolowskiego . Oznacza to, że „ORAZ” jest reprezentowane inaczej.
„W Javie są trzy operatory logiczne: AND
(&&), OR
(||), NOT
(!).
Dobrą wiadomością jest to, że możesz używać nawiasów do konstruowania wyrażeń logicznych o dowolnej złożoności.
Zła wiadomość jest taka, że programiści Javy zdecydowali się na użycie notacji z języka C zamiast słów and
, or
i not
.
Spójrz na ekran:
Operator logiczny | Oczekiwanie | Rzeczywistość |
---|---|---|
AND (∧) |
and |
&& |
OR (∨) |
or |
|| |
NOT (¬) |
not |
! |
„Właściwie nie jest tak źle… Całkiem zwarty. Prawie nauczyłem się ich na pamięć”.
„Cóż, to cudowne. Oto kilka przykładów użycia operatorów logicznych w Javie:
Wyrażenie | Interpretacja | Wyjaśnienie |
---|---|---|
(0 < a) && (a < 100) |
(0 < a) and (a < 100) |
(0 < a) AND (a < 100) |
(!a) && (!b) |
(not a) and (not b) |
(NOT a) AND (NOT b) |
!(!a || !b) |
not((not a) or (not b)) |
NOT((NOT a) OR (NOT b)) |
Przykłady użycia operatorów porównania i zmiennych boolowskich
„Pamiętaj, Amigo, gdziekolwiek możesz napisać wyrażenie logiczne, możesz napisać zmienną logiczną”.
"Jak to?"
„Chodzi mi o to, że możesz pisać wyrażenia logiczne na różne sposoby. Na przykład:
Kod | Wyjaśnienie |
---|---|
|
Jeśli wartość wieku mieści się w przedziale od 18 i 65 , wówczas wyświetlana jest fraza „Możesz pracować”. |
|
Stworzyliśmy isYoung zmienną i przenieśliśmy do niej pierwszą część wyrażenia. Po prostu zastąpiliśmy age >= 18 .age < 18 |
|
Stworzyliśmy zmienną isOld i przenieśliśmy do niej drugą część wyrażenia. Dodatkowo age <= 65 został zastąpiony przez age > 65 . |
„Te trzy przykłady są równoważne. Dopiero w drugim przykładzie przenieśliśmy część wyrażenia z instrukcji if
do oddzielnej zmiennej boolowskiej ( isYoung
). W trzecim przykładzie przenieśliśmy drugą część wyrażenia do drugiej zmiennej ( isOld
). Nawiasem mówiąc, domyślną wartością zmiennej boolowskiej jest false
”.
- Zapamiętam to. Mam nadzieję.
Arytmetyka logiczna
„Przejdźmy teraz pokrótce przez operacje logiczne. Podlegają one bardzo prostym i logicznym (jakże inaczej!) regułom.
„Najpierw zobaczmy, jak OR
działa operator. Znany jest również jako dysjunkcja||
lub .
Wyrażenie | Wynik |
---|---|
true || true |
true |
true || false |
true |
false || true |
true |
false || false |
false |
„Czy możesz teraz wydedukować, jaki wynik wyrażenia a || b
jest oparty na tabeli?”
"Widzę!" Wartość wyrażenia jest true
wtedy, gdy co najmniej jeden termin w wyrażeniu to true
. Jeśli oba są false
, to wynikiem jest false
.
„Zgadza się. Skoro jesteś taki bystry, spójrz jeszcze raz na tabelę i wyobraź sobie, że false
jest 0 i true
1. Kiedy tak na to patrzysz, czy ||
zachowanie operatora przypomina ci coś ze zwykłej arytmetyki?”
„Um… Cóż, to trochę jak dodawanie… Ale kiedy robisz dodawanie, 1 + 1 nie równa się 1”.
„W pewnym sensie jest to równe, jeśli pracujemy tylko z 0 i 1. Ale nie przejmuj się tym teraz. Ważne jest to, że zauważyłeś podobieństwo między operacją a ||
dodawaniem. Oznacza to, że nie będziesz” Nie zdziw się, że operacja ta jest często nazywana „dodawaniem logicznym”.
"Rozumiem."
„Teraz AND
na scenę wkracza operator &&
koniunkcji .
Wyrażenie | Wynik |
---|---|
true && true |
true |
true && false |
false |
false && true |
false |
false && false |
false |
„Jak rozumiem, wynikiem wyrażenia jest true
tylko wtedy, gdy obie wartości tworzące wyrażenie to true
. W przeciwnym razie jest to zawsze false
”.
„Dobra robota, Amigo! Chłoniesz to wszystko jak gąbka. Czy widzisz inne podobieństwo do arytmetyki?”
"Mnożenie!"
„Dokładnie. Mamy więc„ logiczne mnożenie ””.
„Następnie przyjrzymy się operatorowi NOT
, czyli !
odwrotności logicznej .
Wyrażenie | Wynik |
---|---|
!true |
false |
!false |
true |
„Cóż, tutaj wszystko jest dość proste. Operator zmienia się true
na false
i odwrotnie”.
„Dokładnie. Oto kilka przydatnych wyrażeń:”
Wyrażenie | Wynik |
---|---|
m && !m |
false |
m || !m |
true |
!(a && b) |
!a || !b |
!(a || b) |
!a && !b |
GO TO FULL VERSION