jt Java Feltételek, logikai kifejezések
jt 2 Logikai operátorok Logikai kifejezésekre alkalmazhatók a következő műveletek: 1. nem! 2. és&ill.&& 3. kizáró vagy ^ 4. vagy|ill.|| Az && ill. a || művelet az ún. rövid kiértékelésű változatok. Ez azt jelenti, hogy csak addig történik kiértékelés, amíg a pr. el nem tudja dönteni a végeredményt.
jt 3 A következő pr. arra példa, hogy a rövid és a teljes kiértékelés más végrehajtást eredményez(het): import extra.Console; public class MitCsinal303{ MitCsinal303 public static void main(String args[]){ boolean vanA; vanA = Console.readChar("Kerek egy betut: ") == 'A' || Console.readChar("Meg egyet: ") == 'A'; System.out.println("Volt benne A betu: " + vanA); System.out.println();}} Futassuk a pr-ot úgy is, hogy a || jelet |-re cseréljük!
jt 4 Nagyon fontos tehát, hogy pl. ha az előző műveletek rövid változatát (&&, ||) használjuk, akkor olyan eset is elképzelhető, mikor egy értékadás nem történik meg. Ha a és b is igaz, tök mindegy, hogy mi a c. Rövidzár esetén ugyanis a c nem is hajtódik végre. Márpedig ha itt éppen egy értékadás szerepel, akkor az meg sem történik!!! Ez pedig azért nem éppen lényegtelen dolog. Ez szintaktikai hibát nem okoz, de lehet, hogy a pr. helytelenül fog működni. a && b || c
jt 5 Bitenkénti operátorok A log-i műveletek bitekre is alkalmazhatók. A bitenkénti ~ (nem), & (és), | (vagy), ^ (kizáró vagy) műveletek bitenként végzik el a log-i műveleteket úgy, hogy az 1 true, a 0 pedig false értéknek számít. A műveletek mindig az egymásnak megfeleltethető biteken hajtódnak végre. A << (shift-left) operátor 1-gyel balra tolja a biteket úgy, hogy jobbról 0-k „jönnek be”. A >> (shift-right) operátor 1-gyel jobbra tolja a biteket úgy, hogy balról 1-esek „jönnek be”. A >>> (shift-right-with-zero-fill) operátor 1-gyel jobbra tolja a biteket úgy, hogy balról 0-k „jönnek be”.
jt 6 Például: import extra.Console; public class BitMuveletek{ BitMuveletek public static void main(String args[]){ int b=124; // System.out.println("~b: " + ~b);// = -125 System.out.println("b|1: " + (b|1));// = 125 System.out.println("b&4: " + (b&4));// = 4 System.out.println("b^2: " + (b^2));// = 126 System.out.println(b<<1);// = 248 System.out.println(b>>1);// = 62 System.out.println();}}
jt 7 Feltételnek nevezzük a boolean típusú kifejezést. Pl.:a==b & a%2==0 | !(a+b<10) Feltétel Ezek eredménye true vagy false, tehát az egész kifejezés értéke vagy true vagy false lesz.
jt 8 A feltételek és különösen az összetett feltételek megfogalmazása és felírása nem mindig egyszerű feladat. Először meg kell fogalmazni az egyszerű feltételeket. Először meg kell fogalmazni az egyszerű feltételeket. Ezután az egyszerű feltételeket összekapcsoljuk logikai műveletekkel. A prioritási szabályokra ügyelni kell! Ezután az egyszerű feltételeket összekapcsoljuk logikai műveletekkel. A prioritási szabályokra ügyelni kell! –Legerősebb a nem (!). –Második az és (&). –Harmadik a kizáró vagy (^). –Aztán a vagy (|). –&& –|| A balról jobbra szabály érvényes!
jt 9 Ezek után megpróbáljuk a feltételt minél egyszerűbb formára hozni. Ezek után megpróbáljuk a feltételt minél egyszerűbb formára hozni. Végül a feltételt száraz teszt alá vetjük, vagyis több konkrét esetre kipróbáljuk, hogy helyes-e az eredmény. Végül a feltételt száraz teszt alá vetjük, vagyis több konkrét esetre kipróbáljuk, hogy helyes-e az eredmény. Példák Legyenek a, b, c és d int típusú változók! 1) a értéke 0 és 1 közé esik (a határokat is beleértve) : a>=0 & a<=1
jt 10 2)a és b közül egyik sem nulla: a nem nulla:a != 0 b nem nulla:b != 0 Teljesüljön mindkét feltétel egyszerre! a != 0 && b != 0 Tesztelés: Legyen pl. a=0 és b=3! 3)a 25-nél nagyobb és páros, b pedig (a határokat is beleértve) 1000 és 2000 közé eső, nullára végződő szám: (a>25 && a%2==0) && (b>=1000 && b<=2000 && b%10==0)
jt 11 4)a és b közül legalább az egyik nagyobb, mint 10: a >10 | || | b >10 5)a és b közül pontosan az egyik nagyobb, mint 10: a >10 ^ b >10 (kizáró vagy, XOR) 6)a és b közül, valamint c és d közül legalább az egyik nagyobb, mint 10: (a>10 | b>10) & (c>10 | d>10) 7), Vagy az a és b közül, vagy a c és d közül mindkettő nagyobb, mint 10. a>10 & b>10 | c>10 & d>10 (Itt a zárójel használata fontos, mert az és művelet erősebb, mint a vagy.) (Itt nem kell zárójelet használni.)