- Operatori
- Operator dodele
- Aritmetički operatori
- Matematičke funkcije
- Znakovna aritmetika
- Znakovne funkcije
- Relacioni operatori
- Logički operatori
- Prioritet operatora
- Komentari u programu
- Konstante
- Oblast važenja promenljive
- Vežbe
Operatori
Operatori su specijalni znakovi, koji definišu koju operaciju želimo da izvršimo nad operandima (koji mogu biti promenljive, izrazi ili konstante). Željena operacija je definisana operatorom.
Postoji više podela operatora. Prema jednoj od njih operatori se klasifikuju prema broju operanada. Ako je u pitanju jedan operand operator se naziva unarni, binarni operator je sa dva operanda, sa tri ternarni. Druga podela je na prefiksne i postfiksne operatore, po tome da li dolaze pre operanda, odnosno posle njega. NajčešćI slučaj je da se operator nalazi između dva operanada, što je infiksni binarni operator.
Podela koju ćemo mi slediti je na aritmetičke, na niovou bita, relacione i logičke.
Operator dodele
Rezultat proračuna se u promenljivu unosi koristeći iskaz dodele. Iskaz dodele se sastoji od imena promenljive koji je praćen operatorom dodele iza koga idu izraz i tačka-zarez. Operator dodele je znak =. Izraz sa desne strane se izračunava i unosi u promenljivu koja je sa leve strane operatora dodele. U jednom iskazu je dozvoljeno više dodela i u tom slučaju je asocijativnost s desna na levo.
Nazad na početak: 02. Izrazi i naredbe - Linijska struktura programa
Aritmetički operatori
Ovi operatori se koriste za matematičke operacije, pa njihovi operandi moraju biti numeričkog tipa (napominjemo da se kao operand može koristiti i tip char jer je on podskup numeričkog tipa). Pregled svih aritmetičkih operatora dat je u tabeli:
Operator | Opis | Operator | Opis |
+ | sabiranje | += | sabiranje i dodela |
- | oduzimanje | -= | oduzimanje i dodela |
* | množenje | *= | množenje i dodela |
/ | deljenje | /= | deljenje i dodela |
% | moduo (ostatak) | %= | moduo i dodela |
++ | inkrement | -- | dekrement |
Primer:
class PrimerMath{
public static void main (String[] args) {
int a = 1 + 1,
b = a * 3,
c = b / 4,
d = b - a,
e = -d;
System.out.println("a, b, c, d, e, su "+a+", "+b+", "+c+", "+d+", "+e);
}
}
Na izlazu se dobija:
a, b, c, d, e, su 2, 6, 1, 4, -4
Modul operator
Ovaj operator vraća ostatak pri deljenju. Na primer, ako je x jednako 12, dobijamo da je:
x % 10 jednako 2
.
Aritmetičke operacije dodele
Svi binarni operatori koji se koriste u sledećoj formi:
var = var op izraz;
mogu se prikazati pomoću aritmetičkih operacija dodele:
var op= izraz;
Tako isti rezultat dobijamo sa
a = a + 4;
i sa
a += 4;
Inkrement i dekrement
Ova dva operatora su skraćene forme notacije za operacije oduzimanja i dodavanja 1 operandu. Tako operaciju
x = x + 1;
možemo iskazati i u formi
x +=1;
a sada pomoću novih operatora i na sledeći način:
++x;
Analogno
x = x – 1;
ekvivalentno je sa
--x;
Postoji velika razlika ako se operatori ++ i - - koriste u prefiksnoj (kada prethode operandu) ili postfiksnoj formi (kada slede posle operanda). U prvom slučaju operand se menja pre nego što se njegova vrednost koristi. Obrnuto, u postfiksnoj formi prvo se koristi vrednost operanda, pa se tek onda operand inkrementira ili dekrementira. Na primer:
x = 42;
y = ++x;
Sada je y dobio vrednost 43, kao što je očekivano. Drugi slučaj
x = 42;
y = x++;
Vrednost x je preuzeta pre nego što je inkrementirana, pa je sada y jednak 42, a x je 43.
Greške u aritmetici sa celim brojevima mogu nastati kada broj delimo nulom (isto i za %).
Nabrojani operatori mogu da se primene i na brojeve deklarisane kao realni (pokretni zarez).
float a = 10.0f,
b = 4.0f,
c = a%b,
d = a/b;
System.out.println("a, b, c, d, su\n a="+a+",b="+b+",c="+c+",d="+d);
Na izlazu se dobija:
a, b, c, d, su
a=10.0,b=4.0,c=2.0,d=2.5
Greške u aritmetici sa realnim brojevima:
- deljenje sa 0.0 daje rezultat Infinity (pozitivan ili negativan broj veći od najvećeg koji se može predstaviti).
- deljenje malog broja sa malim brojem može dati rezultat NaN (nije broj).
float a = 10.0f,
b = -0.0f,
c = a%b,
d = a/b;
Na izlazu se dobija:
a, b, c, d, su
a=10.0,b=-0.0,c=NaN,d=-Infinity
Nazad na početak: 02. Izrazi i naredbe - Linijska struktura programa
Matematičke funkcije
Java sadrži niz matematičkih funkcija kao deo standardne biblioteke u paketu java.lang i automatski su dostupne u našem programu. Metode koje podržavaju matematičke funkcije su implementirane u klasi Math. Ako želite da koristite metodu upisujete Math. i naziv funkcije.
Primeri metoda:
abs (arg) - apsolutna vrednost argumenta
max (arg1, arg2) - vraća veći od dva argumenta
min (arg1, arg2) - vraća manji od dva argumenta
ceil (arg) - vraća najmanji ceo broj veći od argumenta ili mu je jednak
floor (arg) - vraća najveći ceo broj manji od argumenta ili mu je jednak
round (arg) - vraća ceo broj koji je najbliži vrednosti argumenta
rint (arg) - vraća ceo broj koji je najbliži vrednosti argumenta
sqrt (arg) - kvadratni koren
pow (arg1, arg2) - prvi argument podignut na stepen drugog argumenta
exp (arg) - e na arg
log (arg) - prirodni algoritam od arg
random() - vraća pseudo-slučajni broj od 0.0 do 1.0
Nazad na početak: 02. Izrazi i naredbe - Linijska struktura programa
Znakovna aritmetika
Mogu se vršiti aritmetičke operacije sa char promenljivama.
Napomena: Voditi računa o tome da char promenljiva kada se štampa predstavlja Unicode slovo. Takođe voditi računa o neophodnoj konverziji. Ispravna primena znakova u računskim operacijama:
char bb=23, cc=4, aa=(char)(bb+3);
Znakovne funkcije
Implementirane su u klasi Character.
isDigit() - da li je cifra
isLetter() - da li je slovo
isLetterOrDigit() - da li je slovo ili cifra
isWhiteSpace() - da li je razmak (razmak ' ' , tabulator '\t', novi red ' \n', vracanje valjka '\r', form feed '\f')
char a = '7',
b = 'U',
c = '%';
boolean d = Character.isDigit(a),
e = Character.isDigit(b),
f = Character.isLetter(a),
g = Character.isLetter(b),
h = Character.isLetter(c),
kk = Character.isLetterOrDigit(c),
kk1 = Character.isLetterOrDigit(b);
Na izlazu se dobija:
d, e, f, g, h, kk, kk1 su d=true,e=false,f=false,g=true,h=false,kk=false,kk1=true
Nazad na početak: 02. Izrazi i naredbe - Linijska struktura programa
Relacioni operatori
Njihova uloga je da uporede dve vrednosti. Svi relacioni operatori su dati u tabeli:
Operator | Opis | Operator | Opis |
= = | jednako | < | manji nego |
! = | različit | > = | veći ili jednak |
> | veći nego | < = | manji ili jednak |
Svaki tip, uključujući celobrojan, sa pokretnim zarezom, znakovini i logički može se upoređivati koristeći operatore == i !=.
Samo numerički tipovi koriste ostale operatore. Svaki od operatora vraća rezultat tipa boolean, tako da je vrednost c u primeru koji sledi jednaka false:
int a = 4,
b = 1;
boolean c = a < b;
Nazad na početak: 02. Izrazi i naredbe - Linijska struktura programa
Logički operatori
Ovi operatori deluju samo na operande tipa boolean. Svi oni kombinuju dva boolean operanda i kao rezultat vraćaju boolean vrednost.
Operator | Opis | Operator | Opis |
& | logičko AND | &= | AND i dodela |
| | logičko OR | |= | OR i dodela |
^ | logičko XOR (ekskluzivno OR) |
^= | XOR i dodela |
|| | kratko OR | && | kratko AND |
== | jednak | != | nije jednak |
! | logičko unarno NOT | ?: | ternarno if-then-else |
Program koji ilustruje prethodno nabrojane operatore:
class PrimerLogic {
public static void main(String args[]){
boolean a = true,
b = false,
c = a | b,
d = a & b,
e = a ^ b,
f = (!a & b) | (a & !b),
g = !a;
System.out.println(“ a = “+a+
“b = “+b+“ c = “ + c+“ d = “ + d+
“ e = “+e+“ f = “ + f+“ g = “ + g);
}
}
Dobijamo rezultat na izlazu:
a = true
b = false
c = true
d = false
e = true
f = true
g = false
Kratkospojni logički operatori
Kratkospojni operatori uopšte ne razmatraju desni operand ako je rezultat jasan već na osnovu levog. Dobru stranu ovoga vidimo u sledećem uslovu:
if (del !=0 && delj / del > 10)
U ovom primeru ako je del jednako 0 neće se ići na deljenje nulom što bi se dogodilo da je umesto operatora && stajao operator &.
Kondicioni (ternarni if-then-else) operator
Opšti oblik je:
iskaz ? izraz1 : izraz2
gde je iskaz bilo koji izraz koji vraća boolen vrednost. Ako je rezultat iskaza true, onda se izvršava izraz1, u suprotnom izraz2. Primer:
rez = delilac ==0 ? 0 : deljenik / delilac;
Ovde rez dobija vrednost 0 ili deljenik / delilac u zavisnosti da li je delilac jednak 0 ili nije.
Nazad na početak: 02. Izrazi i naredbe - Linijska struktura programa
Prioritet operatora
Operatori su u sledećoj tabeli prikazani po opadajućem prioritetu, od najvećeg ka najmanjem (operatori u istoj vrsti imaju isti prioritet. Prioritet raste sa pomeranjem naviše u tabeli):
prioritet | Asocijativnost |
() [] . post ++ -- | leva (na desno) |
++ -- ! | desna (na levo) |
* / % | leva (na desno) |
+ - | leva (na desno) |
>> >>> << | leva (na desno) |
> >= < <= | leva (na desno) |
= != | leva (na desno) |
& | leva (na desno) |
^ | leva (na desno) |
| | leva (na desno) |
&& | leva (na desno) |
|| | leva (na desno) |
?: | leva (na desno) |
= op= | desna (na levo) |
Primeri:
a+++b je (a++)+b jer je postfiksni operator prioritetniji, nije tačno a+(++b).
a += b = c += d = 10 je a += (b = (c += (d = 10));
Komentari u programu
- način: // komentariše liniju programa desno
- način: /* i */ komentariše sve što se nalazi između.
Nazad na početak: 02. Izrazi i naredbe - Linijska struktura programa
Konstante
Promenljivama koje u programu treba da ostaju konstantne dodaje se ključna reč final. Kompajler automatski proverava i upozorava u slučaju kada se pokušava menjati vrednost konstante.
Često korišćene konstante u JAVA-i
naziv | opis |
Math.E | osnova prirodnog logaritma |
Math.PI | broj pi |
Float/Double.NEGATIVE_INFINITY | negativno beskonacno |
Float/Double.POSITIVE_INFINITY | pozitivno beskonacno |
Float/Double.NaN | not a number, nije broj |
Byte/Short/Integer/Long/Float/Double.MAXIMUM_VALUE | maksimalna vrednost tipa podataka |
Byte/Short/Integer/Long/Float/Double.MINIMUM_VALUE | minimalna vrednost tipa podataka |
Oblast važenja promenljive
Oblast važenja promenljive je deo programa u kome se promenljiva može koristiti. Promenljiva ne postoji pre deklaracije i možete joj pristupiti tek nakon deklaracije. Ona postoji do kraja bloka u kome je deklarisana, a tu su uključeni i svi ugnježdeni blokovi.
{
int a=1; // deklaracija i inicijalizacija a
// ovde je a dostupna
// ovde b nije dostupna
{
// ovde je a dostupna
// ovde b nije dostupna
int b=5; // deklaracija i inicijalizacija b
// ovde je a dostupna
// ovde je i b dostupna
}
// ovde je a dostupna
// ovde b nije dostupna
}
Nazad na početak: 02. Izrazi i naredbe - Linijska struktura programa
Vežbe
Vežbe iz ove oblasti se nalaze posle oblasti 3.