Operatori u Javi

Lekcija 3 od 16 · Java

Operatori u Javi izvršavaju akcije nad promenljivim ili vrednostima, omogućavajući širok spektar proračuna i logičkih operacija unutar programa. Oni su neophodni za konstruisanje izraza, koji kombinuju vrednosti (operande) sa operatorima da bi proizveli rezultat. Java podržava različite tipove operatora, uključujući:

  • Aritmetički operatori: Izvršite osnovne matematičke operacije kao što su sabiranje, oduzimanje i deljenje.
  • ​ Unarni i binarni operatori: Primeni na jedan ili dva operanda, respektivno.
  • Ternarni operater: ? : je jedinstveni operator sa tri dela, koji omogućava uslovne evaluacije. Razumevanje ovih operatora pomaže u izgradnji efikasnijeg i izražajnijeg koda, posebno kako izrazi postaju složeniji.

Operatori predstavljaju radnje koje se izvršavaju nad operandima dajući pri tome određen rezultat. Izrazi su proizvoljno složeni sastavi operanda i operatora.

Operatori mogu da se primenjuju na jedan operand( unarni operatori) ili na dva operanda(binarni operatori).

Postoji i jedan operator sa tri operanda a to je ? : (objašnjen kasnije).

Aritmetički operatori

Koriste se za izraze sa osnovnim računskim operacijama. U tabeli ispod je dat pregled aritmetičkih operatora

U sledećoj tabeli je dat pregled aritmetičkih podataka.

Operator Upotreba Opis
+ op1+op2 Sabira op1 i op2
- op1-op2 Oduzima op2 od op1
* op1*op2 Množi op1 sa op2
/ op1/op2 Deli op1 sa op2
% op1%op2 Računa ostatak deljenja op1 sa op2

Sledi primer AritmetickiOpeatori u kome se definišu dve celobrojne promenljive i dva cela broja sa dvostrukom preciznošću (double) i sa njima se obavljaju različite aritmetičke operacije. Ceo program:

public class AritmetickiOperatori {
    public static void main(String[] args) {
        // nekoliko brojeva
        int i = 37;
        int j = 42;
        double x = 27.475;
        double y = 7.22;
        System.out.println("Vrednosti promenljivih su...");
        System.out.println("    i = " + i);
        System.out.println("    j = " + j);
        System.out.println("    x = " + x);
        System.out.println("    y = " + y);

        // sabiranje brojeva
        System.out.println("Sabiranje...");
        System.out.println("    i + j = " + (i + j));
        System.out.println("    x + y = " + (x + y));

        // oduzimanje brojeva
        System.out.println("Oduzimanje...");
        System.out.println("    i - j = " + (i - j));
        System.out.println("    x - y = " + (x - y));

        // množenje brojeva
        System.out.println("Mnozenje...");
        System.out.println("    i * j = " + (i * j));
        System.out.println("    x * y = " + (x * y));

        // deljenje brojeva
        System.out.println("Deljenje...");
        System.out.println("    i / j = " + (i / j));
        System.out.println("    x / y = " + (x / y));

        // deljenje po modulu
        System.out.println("Deljenje po modulu...");
        System.out.println("    i % j = " + (i % j)); // ostatak deljenja dva broja i/j
        System.out.println("    x % y = " + (x % y)); // ostatak deljenja dva broja x/y

        // mešanje tipova
        System.out.println("Mesanje tipova...");
        System.out.println("    j + y = " + (j + y));
        System.out.println("    i * x = " + (i * x));
    }
}

Izlaz iz ovog programa je:

Izlaz programa:

Vrednosti promenljivih su...
i = 37
j = 42
x = 27.475
y = 7.22
Sabiranje...
i + j = 79
x + y = 34.695
Oduzimanje...
i - j = -5
x - y = 20.255000000000003
Mnozenje...
i * j = 1554
x * y = 198.36950000000002
Deljenje...
i / j = 0
x / y = 3.805401662049862
Deljenje po modulu...
i % j = 37
x % y = 5.815000000000002
Mesanje tipova...
j + y = 49.22
i * x = 1016.575

Ostatak deljenja dva broja. Operator "%"

Ovaj operator se vrlo često koristi za rešavanje određenih zadataka u programiranju. Npr. za ispitivanje deljivosti. Operator "%" izračunava ostatak deljenja dva broja.

Nađimo na primer ostatak pri sledećem deljenju:

A=7 / 3

Ako posmatramo poznat postupak za određivanje ostatka:

Operatori u javi. Ostatak pri deljenju dva cela broja
Slika 1: Operatori u javi. Ostatak pri deljenju dva cela broja

Rezultat deljenja je u ovom primeru 2, a celobrojni ostatak pri deljenju je 1.

Ovaj celobrojni ostatak bi se dobio direktno korišćenjem operatora "%" :

A=7 %  3 = 1

Da bi smo pokazali upotrebu ovog operatora, posmatrajmo sledeći primer:

Primer 1: Vreme

Tekst zadatka: Uneti vreme u sekundama i odrediti koliko je to zapravo minuta, akoliko sekundi. Ispisati dakle, vreme, u formatu :mm:ssRešenje: Ako korisnik unese vreme od npr 155s, to znači da vreme treba napisati kao 2min: 35s.

S obyirom da jedan minut ima 60s, broj minuta u vrednosti 155 možemo dobiti celobrojnim deljenjem sa 60, a to je u ovom slučaju jednako 2.

int vreme = 155, minuti;
minuti = vreme / 60; // 155/60=2(zaokruženo na 2 jer se dele celi brojevi)

Da bi odredili preostalo vreme u sekundama, potrebno je naći ostatak deljenja sa 60:

int vreme = 155, minuti;
int sekunde;
minuti = vreme / 60; // 155/60=2
sekunde = vreme % 60; // 155 % 60=35

Do ostatka se moglo doći i na drugi način, oduzimanjem, ali je u ovom primeru pokazano kako se upotrebljava operator "%".

Kompletan kod sa unosom vremena od strane korisnika je prikazan ispod:

import java.util.Scanner;

public class OdredjivanjeVremena {
    public static void main(String[] args) {
        int vreme, minuti;
        int sekunde;
        Scanner ucitavac = new Scanner(System.in);
        System.out.println("Unesite vreme u sekundama");
        vreme = ucitavac.nextInt();
        minuti = vreme / 60; // 155 / 60 = 2
        sekunde = vreme % 60; // 155 % 60 = 35
        System.out.printf("%2d min:%2d sekundi", minuti, sekunde);
    }
}
Slika 2: Operatori u javi - primer 1: Određivanje vremena

Primer 2: Cifra stotina

Tekst zadatka:Napiši program koji iz dekadnog zapisa broja izbacuje cifru stotina.Uputstvo: Korisnik prvo treba da unese broj B. Neka je npr. B =789. Da bi smo iz broja B izvukli pojedinačno cifre, uvešćemo tri dodatne promenljive za cifre stotice, desetice i jedinice.

int B = 789;
int s, d, j; // cifre stotica , desetica i jedinica. S obzirom da je 789=7*100 + 8*10 + 9, s=7, d=8 i j=9

Da bi racunski dobili ove cifre, koristeći broj B, koristićemo operatore "/" i "%". Ako želimo da izvučemo cifru 9 izvršićemo deljenje sa 10:

789 / 10 = 9

Da bi smo dobili cifru desetica, "8" u ovom primeru, izvr[i'emo dve uzastopne operacije: deljenje sa 10, a zatim ostatak deljenja sa 10

(789 / 10) % 10 = (78) % 10 = 8

Treba imati u vidu da se deljenje vrši sa celobrojnim konstantama(int), pa je rezultat deljenja ceo broj, tj. umesto 78,9 dobiće se samo 78, što predstavlja prvi manji ceo broj.Cifru jedinica možemo dobiti na sličan način:

(789 / 10) / 10 = (78) / 10 = 7

Dakle, za izračunavanje cifre desetice u kodu treba pisati:

int B = 789;
int s, d, j;
d = B / 10 % 10;

Ostatak zadatka je ostavljen čitaocu da samostalno reši.

Na kraju treba da se odredi broj N, bez cifre stotina. Jedan od načina bi bio:

int N;
N = d * 10 + j; //N= 8 * 10 + 9 = 89

Tipovi podataka za operande

Kada se kao operandi u jednoj aritmetičkoj operaciji koriste zajedno ceo broj i realan broj, rezultat je realan broj. Ceo broj se implicitno konvertuje u realan broj pre samog izračunavanja. U tabeli koja sledi su prikazani tipovi podataka koji se vraćaju iz aritmetičkih operacija, na osnovu tipova operanada. Potrebne konverzije se vrše pre nego što se obavi operacija.

Tip podatka za rezultat Tipovi podataka za operande
long Nijedan od operanada nije float ili double (artiemtika celih brojeva), a najmanje jedan od operatora je tipa long
int Nijedan od operanada nije float ili double (aritmetika celih brojeva). Nijedan operand nije long.
double Najmanje jedan operand je tipa double
float Najmanje jedan operand je tipa float. Nijedan nije tipa double

Postoje i dva operanda koji omogućavaju skraćeno izračunavanje. To su operator ++(inkrement) koji operand povećava za 1 i operator – (dekrement) koji operand smanjuje za 1. Oba operatora mogu da se pojave ispred operanda (prefiks) i iza operanda (postfiks). Kod verzije prefiks, ++op/--op se prvo operand povećava za 1, pa se taj rezultat koristi dalje u izrazima. Kod verzije postfix se prvo operand primeni u izrazu (stara vrednost), a tek posle se ta vrednost promeni.

Primer operatora ++/--

Tekst zadatka: Zadati vrednosti promenljivih za dve vrste voćaka i na ovom primeru pokazati razliku upotrebe operatora ++/-- kao prefiks i sufiks

public class InkrementDekrement {
    public static void main(String[] args) {
        // deklaracija i inicijalizacija tri promenljive
        int brojNarandzi = 5;
        int brojJabuka = 10;
        int brojVocaka = 0;

        // povećava se broj narandži prvo, a zatim računa zbir voćaka
        brojVocaka = ++brojNarandzi + brojJabuka;
        System.out.println("Ukupan broj vocaka u programu sa prefiks varijantom operatora ++");
        System.out.println("Broj narandzi je " + brojNarandzi);
        System.out.println("Ukupan broj vocaka je " + brojVocaka);

        // prvo se računa zbir voćaka, a zatim se poveća broj narandži
        brojVocaka = brojNarandzi++ + brojJabuka;
        System.out.println("Ukupan broj vocaka u programu sa postfiks varijantom operatora ++");
        System.out.println("Broj narandzi je " + brojNarandzi);
        System.out.println("Ukupan broj vocaka je " + brojVocaka);
    }
}
Slika 3: Inkrementalni operator u javi(++) - primer : Broj voćaka, prvi deo

Posle pokretanja programa:

Izlaz programa:

Ukupan broj vocaka u programu sa prefiks varijantom operatora ++
Broj narandzi je 6
Ukupan broj vocaka je 16
Ukupan broj vocaka u programu sa postfiks varijantom operatora ++
Broj narandzi je 7
Ukupan broj vocaka je 16
Slika 4: Inkrementalni operator u javi(++) - primer : Broj voćaka, izvršenje programa

U slučaju kada je operator “++” upotrebljen kao prefiks, broj narandzi, koji je u početku bio 5, prvo se povećao na 6, pa je ukupan broj voćaka 10 + 6 = 16. U drugom slučaju, kada je operator “++” korišćen kao sufiks u izrazu, prvo je izračunat ukupan broj voćaka sa prvobitnom vrednošću broja jabuka 5, dakle, 10 + 5 = 15, a tek posle toga se broj jabuka povećao na 6. Kada bi se broj jabuka smanjivao, tj. Koristio operator “- - “ logika bi bila ista.

Relacioni i uslovni operatori

Relacioni operator poredi dve vrednosti i određuje vrednost između njih. Na primer, != vraća tačno ako dva operanda nisu jednaka. U tabeli koja sledi su dati relacioni operatori:

Operator Upotreba Vraća tačno(true) ako je
> op1>op2 op1 veće od op2
>= op1 >= op2 op2 veće ili jednako op1
< op1 < op2 op1 manje od op2
<= op1 <= op2 op1 manje ili jednako op2
== op1 == op2 op1 jednako sa op2
!= op1 != op2 op1 različito od op2

U primeru koji sledi smo definisali tri cela broja i poredili ih pomo}u relacionih operatora.

Primer relacionih operatora

Tekst zadatka: Zadati vrednosti tri celobrojne promenljivih i pokazati različite primere upotrebe relacionih operatora

public class RelacioniOperatori {
    public static void main(String[] args) {
        // nekoliko brojeva
        int i = 37;
        int j = 42;
        int k = 42;
        System.out.println("Vrednosti promenljivih...");
        System.out.println("    i = " + i);
        System.out.println("    j = " + j);
        System.out.println("    k = " + k);
        // veće od
        System.out.println("Vece od...");
        System.out.println("    i > j = " + (i > j)); // false
        System.out.println("    j > i = " + (j > i)); // true
        System.out.println("    k > j = " + (k > j)); // false, oni su jednaki
        // veće ili jednako
        System.out.println("Vece ili jednako...");
        System.out.println("    i >= j = " + (i >= j)); // false
        System.out.println("    j >= i = " + (j >= i)); // true
        System.out.println("    k >= j = " + (k >= j)); // true
        // manje od
        System.out.println("Manje od...");
        System.out.println("    i < j = " + (i < j)); // true
        System.out.println("    j < i = " + (j < i)); // false
        System.out.println("    k < j = " + (k < j)); // false
    }
}
Slika 5: Primer relacionih operatora u javi

Evo kako izgleda izlaz iz ovog programa:

Izlaz programa:

Vrednosti promenljivih...
i = 37
j = 42
k = 42
Vece od...
i > j = false
j > i = true
k > j = false
Vece ili jednako...
i >= j = false
j >= i = true
k >= j = true
Manje od...
i < j = true
j < i = false
k < j = false
Slika 6: Primer relacionih operatora u javi-izvršenje programa

Relacioni operatori se često koriste zajedno sa logičkim operatorima, čime se dobijaju složeni izrazi. U Javi postoje sledeći logički operatori:

Operator Upotreba Vraća tačno(true) ako je
&& op1 && op2 i op1 i op2 imaju vrednost true. op2 se izračunava samo ako je potrebno
|| op1 || op2 ili op1 ili op2 ima vrednost true (tačno). op2 se izračunava samo ako je potrebno
! !op op ima vrednost false (netačno)
& op1 & op2 i op1 i op2 imaju vrednost tačno. Uvek se izračunava i op1 i op2
| op1 | op2 Ili je op1 ili je op2 true (tačno). Uvek se izračunava i op1 i op2.
^ op1 ^ op2 ako su op1 i op2 različiti, odnosno ako jedan ima vrednost true, ali ne i oba

Koja je razlika između operatora && i &? Razlika je u brzini izvršavanja programa. Sa operatorom & se vrednost drugog operatora uvek izračunava, dok se sa operatorom && izračunava vrednost prvog operanda, a ako je to dovoljno da se izračuna vrednost celog izraza, drugi operand se ne izračunava.

Operator dodele

Osnovni operator dodele je operator =, kojim se jedna vrednost dodeljuje drugoj. U Javi postoje i operatori dodele kojim se odjednom izvršava više operacija. Pretpostavimo da želite da saberete vrednost promenljive sa nekim brojem i da rezultat dodelite istoj promenlivoj. Napisali biste: i = i + 2; Skraćeno se ovo može napisati pomoću operatora += na sledeći način: i += 2; Prethodna dva izraza su ekvivalentna. U tabeli koja sledi su dati neki od operatora ovog tipa:

Operator Upotreba Ekvivalentno sa:
+= op1 += op2 op1 = op1 + op2
-= op1 -= op2 op1 = op1 - op2
*= op1 *= op2 op1 = op1 * op2
/= op1 /= op2 op1 = op1 / op2
%= op1 %= op2 op1 = op1 % op2
&= op1 &= op2 op1 = op1 & op2
|= op1 |= op2 op1 = op1 | op2
^= op1 ^= op2 op1 = op1 ^ op2

Ostali operatori

U tabeli koja sledi su dati ostali operatori koji postoje u Javi

Operator Opis operatora
[] Indeksiranje
() poziv funkcije
. pristup članu(elementu) strukture
-> pristup članu(elementu) strukture pomoću pokazivača
*(unarni) pristup podatku pomoću pokazivača(indirektno adresiranje)
&(unarni) adresa promenljive

Operator ?:

Ovaj operator vraća op2, ako op1 ima vrednost true (tačno) ili vrednost op3 ako op1 ima vredcnost false (netačno).

op1 ? op2 : op3

Pretpostavimo da imamo dve celobrojne promenljive tipa int, mojeGodine i tvojeGodine. Želimo da trećoj promenljivoj, stariji, dodelimo veću od ove dve vrednosti. Evo kako izgleda iskaz: stariji = tvojeGodine > mojeGodine ? tvojeGodine : mojeGodine Prvi argument ovog operatora je logički izraz tvojeGodine > mojeGodine. Ako taj izraz ima vrednost true (tačno), promenljiva stariji dobija vrednost tvojeGodine, a ako je prvi izraz ocenjen kao false (netačno) promenljiva stariji dobija vrednost mojeGodine.

Operator []

Ovaj operator se koristi za deklarisanje nizova i za pristupanje elementima niza. float [] realniNiz = new float[10]; Ovaj izraz deklariše niz realnih brojeva sa deset elemenata. Sedmom članu niza možete da pristupite na sledeći način: realniNiz[6]

Operator .

Ovaj operator se koristi za pristup članovima klase. Više o njemu kada se bude govorilo o klasama.

Operator ()

Koristi se prilikom deklarisanja i poziva metoda klase. Više o njemu kada se bude govorilo o klasama.

Operator (tip)

Vrednost se konvertuje u određeni tip. (double) a a se pretvara u tip double.

Operator new

Koristi se za kreiranje novog objekta ili niza. Integer a = new Integer(10); U ovom primeru se kreira novi objekat klase Integer.

Operator instanceof

Ovaj operator testira da li prvi operator predstavlja priemrak klase koja je data drugim operatorom. op1 instanceof op2 op1 mora biti objekat, a op2 mora biti ime klase. Objekat je instanca klase ako je primrak baš te klase ili neke klase koja je iz nje izvedena.

Prioritet operatora

Ako se u izrazu nađe više operatora oni se izvršavaju određenim redosledom. U tabeli koja sledi je dat prioritet operatora. Operatori sa najvišim prioritetom su navedeni prvi, a zatim slede oni sa nižim prioritetom. Ako želite da promenite prioritet operatora, treba da koristite zagrade.

Prioritet Broj operanada Smer grupisanja: Operatori:
15 2 ->

[] () . ->

14 1 ->

! ~ ++ -- + - * & (tip) sizeof

13 2 ->

* / %

12 2 ->

+ -

11 2 ->

<< >>

10 2 ->

< <= > >=

9 2 ->

== !=

8 2 ->

&

7 2 ->

^

6 2 ->

|

5 2 ->

&&

4 2 ->

||

3 2 ->

?:

2 2 ->

=  +=  -=  *=  /=  %=  &=  ^=  |=  <<=  >>=

1 2 ->

,

Primer upotrebe operatora ?

Zamislimo da imamo broj i želimo da proverimo da li je paran ili neparan. Umesto da koristimo if-else, možemo koristiti ternarni operator.int broj = 5;
String rezultat = (broj % 2 == 0) ? "paran" : "neparan";
System.out.println("Broj je " + rezultat);

Objašnjenje: U ovom primeru, uslov (broj % 2 == 0) proverava da li je broj paran. Ako je uslov tačan, vrednost će biti "paran", a ako nije, rezultat će biti "neparan".

Proverite svoje znanje rešavanjem kviza

Proveri znanje

Otvori kviz

Kviz: Operatori u Javi

1. Koliko je 7 / 2 u Javi (oba int)?




2. Koliko je 789 / 10 % 10?




3. Šta vraća a > b ? a : b?




4. Posle int x = 5; x += 3; koliko je x?