"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 <65Detta 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.ornot

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
int age = 35;
if (age >= 18 && age <= 65)
   System.out.println("You can work");
Om värdet på ålder är mellan 18och 65, så visas frasen "Du kan arbeta".
int age = 35;
boolean isYoung = (age < 18);
if (!isYoung && age <= 65)
   System.out.println("You can work");
Vi skapade en isYoungvariabel och flyttade in den första delen av uttrycket. Vi ersatte helt enkelt age >= 18med age < 18.
int age = 35;
boolean isYoung = (age < 18);
boolean isOld = (age > 65);
if (!isYoung && !isOld)
   System.out.println("You can work");
Vi skapade en isOld-variabel och flyttade in den andra delen av uttrycket. Dessutom age <= 65ersattes av age > 65.

"Dessa tre exemplen är likvärdiga. Först i det andra exemplet flyttade vi en del av uttrycket från satsen iftill 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 ORoperatö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 trueom minst en term i uttrycket är true. Om båda är det falseså ä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 truebara om båda värdena som utgör uttrycket är . trueAnnars ä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å NOToperatorn, aka !, aka den logiska inversen .

Uttryck Resultat
!true false
!false true

"Tja, allt är ganska enkelt här. Operatören byter truetill falseoch 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