02. Izrazi i naredbe - Linijska struktura programa

 

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

  1. način: // komentariše liniju programa desno
  2. 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.