"Hälsningar, Amigo! Jag blev så medtagen av att lösa logiska problem att jag inte märkte att du kom in. Här är en för dig: om krokodiler flyger, då är snö vit. Det finns en flygande krokodil. Vad är slutsatsen?"
"Ehm... Så vi drar slutsatsen att snö är vit?"
"Utmärkt! Du klarade initieringstestet. Du är redo att bemästra nästa ämne. Det kallas "logiska operatorer". Och vi börjar med boolesk logik. Instinktivt vet du det redan. Du är trots allt en robot . Vi behöver bara justera dina inställningar så att de matchar Java-språket."
"Boolesk logik? Jag fick nyligen höra om den booleska typen..."
"Ja, det finns en direkt koppling här. Booleska uttryck kan bara vara sant eller falskt. Och som det händer handlar den här sortens logik om uttryck som är sanna eller falska, och kombinationer av sådana uttryck. Till exempel uttrycket 18 < 25 är alltid sant, och 7 < 5 är alltid falskt. Uttrycket (i < 10) beror på värdet av i. Och om uttrycket till exempel utvärderas till sant, då kan vi be programmet att göra något."
"Ahh, jag förstår det. Booleska uttryck tillåter oss inte bara att dra logiska slutsatser, utan också att skapa gafflar i program."
"Precis. Huvudsaken är att lära sig hur man skriver dem. Till exempel i Java kan du inte bara gå och skriva uttrycket. 18 < age <65
Detta skulle vara syntaktiskt felaktigt och programmet kommer inte att kompilera.
"Men du kan skriva det så här:
(18 < age) AND (age < 65)
Naturligtvis använder vi faktiskt inte det ENGELSKA ordet AND
. Istället behöver du en boolesk operator . Det vill säga "OCH" representeras annorlunda.
"Det finns tre logiska operatorer i Java: AND
(&&), OR
(||), NOT
(!).
Den goda nyheten är att du kan använda parenteser för att konstruera logiska uttryck av vilken komplexitet som helst.
Den dåliga nyheten är att Java-utvecklare bestämde sig för att använda notation från C -språket istället för orden och and
.or
not
Kolla på skärmen:
Logisk operatör | Förväntan | Verklighet |
---|---|---|
AND (∧) |
and |
&& |
OR (∨) |
or |
|| |
NOT (¬) |
not |
! |
"Det är faktiskt inte så illa... Ganska kompakt. Jag har nästan memorerat dem."
"Tja, det är fantastiskt. Här är några exempel på hur man använder logiska operatorer i Java:
Uttryck | Tolkning | Förklaring |
---|---|---|
(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)) |
Exempel på användning av jämförelseoperatorer och booleska variabler
"Kom ihåg, Amigo, varhelst du kan skriva ett logiskt uttryck, kan du skriva en logisk variabel."
"Hur är det?"
"Jag menar att du kan skriva logiska uttryck på olika sätt. Till exempel:
Koda | Förklaring |
---|---|
|
Om värdet på ålder är mellan 18 och 65 , så visas frasen "Du kan arbeta". |
|
Vi skapade en isYoung variabel och flyttade in den första delen av uttrycket. Vi ersatte helt enkelt age >= 18 med age < 18 . |
|
Vi skapade en isOld-variabel och flyttade in den andra delen av uttrycket. Dessutom age <= 65 ersattes av age > 65 . |
"Dessa tre exemplen är likvärdiga. Först i det andra exemplet flyttade vi en del av uttrycket från satsen if
till en separat boolesk variabel ( isYoung
). I det tredje exemplet flyttade vi den andra delen av uttrycket till en andra variabel ( isOld
). Förresten, standardvärdet för en boolesk variabel är . false
"
"Jag kommer ihåg det. Jag hoppas."
Logisk aritmetik
"Låt oss nu kort gå igenom logiska operationer. De lyder väldigt enkla och logiska (hur kunde det vara annorlunda!) regler.
"Först, låt oss se hur OR
operatören fungerar. Det är också känt som ||
eller disjunction .
Uttryck | Resultat |
---|---|
true || true |
true |
true || false |
true |
false || true |
true |
false || false |
false |
"Kan du nu härleda vad resultatet av uttrycket a || b
är baserat på tabellen?"
"Jag förstår!" Värdet på ett uttryck är true
om minst en term i uttrycket är true
. Om båda är det false
så är resultatet false
.
"Det stämmer. Eftersom du är så smart, ta en ny titt på tabellen och föreställ dig att det false
är 0 och true
är 1. När du ser på det på det sättet, påminner operatörens ||
beteende dig om något från vanlig aritmetik?"
"Ehm... Tja, det är lite som addition... Men när du gör addition är 1 + 1 inte lika med 1."
"Det finns en mening där det är lika om vi bara arbetar med 0 och 1. Men bry dig inte om det just nu. Det viktiga är att du märkte likheten mellan operation ||
och addition. Det betyder att du vinner" inte bli förvånad över det faktum att denna operation ofta kallas "logisk addition".
"Jag fattar."
"Nu kommer AND
, aka &&
, aka konjunktionsoperatören , upp på scenen.
Uttryck | Resultat |
---|---|
true && true |
true |
true && false |
false |
false && true |
false |
false && false |
false |
"Som jag förstår det är resultatet av ett uttryck true
bara om båda värdena som utgör uttrycket är . true
Annars är det alltid false
."
"Bra gjort, Amigo! Du absorberar allt detta som en svamp. Ser du en annan likhet med aritmetik?"
"Multiplikation!"
"Precis. Så här har vi en 'logisk multiplikation'".
"Närnäst tittar vi på NOT
operatorn, aka !
, aka den logiska inversen .
Uttryck | Resultat |
---|---|
!true |
false |
!false |
true |
"Tja, allt är ganska enkelt här. Operatören byter true
till false
och vice versa."
"Precis. Här är några användbara uttryck för dig:"
Uttryck | Resultat |
---|---|
m && !m |
false |
m || !m |
true |
!(a && b) |
!a || !b |
!(a || b) |
!a && !b |
GO TO FULL VERSION