Operátorok

Operátor-precedencia (kiértékelési sorrend)

 

A programozás során gyakran kell egyszerre több számítást végeznünk, párhuzamosan vele egy számításba több bemeneti adatot zsúfolnunk. Ennek problémáját már az alábbi, futtatható Java-kódban is érzékelhetjük…

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
    int a = 1;
    int b = 2;
    int c = 3;
    System.out.println(a + b * c);
    System.out.println((a + b) * c);
    }
}
 

Végeredmény:

7

9

 

…hiszen azonos bemeneti adatokkal különböző kimeneti adatot (végeredményt) kaptunk.

 

Mi a probléma?

A Java-fordító helyesen jár el, amikor belső, kialakított precedenciasora (végrehajtási sorrendje) szerint először a szorzást végzi el, majd csak utána az összeadást, de meglehet, mi nem ezt a műveletet akartuk végrehajtatni.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

A Java belső precedenciasorát (végrehajtási sorrendjét) zárójelezéssel tudjuk felülírni: mindig a belső zárójeles műveletek hajtódnak végre először és így haladunk kifelé.

 

Nézzünk erre egy jellemző példát egy futtatható Java-kód formájában! Az alapképlet egyszerű…

 

2 + 2 * 4 – 2 / 2

 

…azonban a zárójelezés variálásával igen különböző (itt négyféle) eredményt kapunk. Mivel a műveletsor osztást is tartalmaz, a biztonság kedvéért az eredménynél float adattípust használunk:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args) {
    float eredmeny = 2 + 2 * 4 - 2 / 2;
    System.out.println(eredmeny);
    eredmeny = 2 + (2 * 4) - (2 / 2);
    System.out.println(eredmeny);
    eredmeny = (2 + 2) * (4 - 2) / 2;
    System.out.println(eredmeny);
    eredmeny = 2 + ((2 * 4) - 2) / 2;
    System.out.println(eredmeny);
    eredmeny = (2 + 2) * 4 - (2 / 2);
    System.out.println(eredmeny);
    }
}

 

Végeredmény:

9.0

9.0

4.0

5.0

15.0

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

Következésképpen nagyon tisztában kell lennünk azzal, hogy mit szeretnénk kiszámolni és milyen végeredményeket várunk. Az okos, figyelmes, matematikai szemléletet nem tudja helyettesíteni egyetlen jól megírt program sem.

 

Legvégül nézzük meg a Java belső, beépített, műveleti precedencia-sorát. A sorszám eme végrehajtási sorrend hierarchiáját jelöli:

  1. a++, a--

  2. ++a, --a, +a, -a

  3. *, /, %

  4. +, -

  5. <, >, <=, >=

  6. ==, !=

  7. &&

  8. ||

  9. =, +=, -=, *=, /=, %=