Објектно орјентисано

програмирање

Владимир Филиповић

vladaf@matf.bg.ac.rs

Александар Картељ

kartelj@matf.bg.ac.rs

Управљачке структуре у

програмском језику Јава

Владимир Филиповић

vladaf@matf.bg.ac.rs

Александар Картељ

kartelj@matf.bg.ac.rs

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 3 / 35

  • Наредбе гранања омогућавајуда се одабере извршавање
једног дела програма у зависности од испуњења одређених
услова.
  • Користе се још и називи условне наредбе,
односно наредбе одабирања.
  • Постоје две наредбе гранања у језику Јава:
1. наредба if
2. и наредба switch

Наредбе гранања

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 4 / 35

  • За условно извршење наредбе или за избор између извршења
две наредбе обично се користи наредба if.
  • Синтакса наредбе if у Jaва језику је следећа:
  • Из наведеног описа закључујемо да се наредба if појављује у
два облика:
1. if () -непотпуни облик
2. if () else -потпуни облик.

Наредба if

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 5 / 35

  • Наредба if у непотпуном облику извршава се на следећи
начин:
1. израчунава се вредност израза;
2. ако је вредност израза истинита, извршава се наредба
која следи иза израза;
3. ако је вредност израза неистинита, извршава се прва
наредба која следи иза наредбе if.

Наредба if (2)

if ( U )
Nar1 ;
Nar2 ;

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 6 / 35

  • Наредба if у потпуном облику се извршава на следећи начин:
1. израчунава се вредност израза;
2. ако је вредност израза истинита, извршава се наредба
која следи иза израза;
3. у супротном, извршава се наредба иза резервисане речи
еlse.

Наредба if (3)

if ( U )
Nar1 ;
else
Nar2 ;

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 7 / 35

  • У случају када се појављује наредба if унутар наредбе if, са
једном придруженом наредбом else, поставља се питање да ли
је наредба elseпридружена првој наредби ifили другој
наредбиif.
  • Другачије формулисано, ако имамо конструкцију:
if ( U1 ) if ( U2 ) Nar1 else Nar
  • да ли ће се Nar2извршити ако је:
(а) логички израз U1тачан, а логички израз U2нетачан, или
(б) ако је логички израз U1нетачан?

Наредба if ( 4 )

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 8 / 35

Пример.
if ( a < b ) System. out. println ( “a je manje od b” );
if ( tezina > 200 ) {
tezina = 200 ;
ind = true;
}else
ind =false;
Уместо наредбе if у неким ситуацијама може се употребити условни оператор
?:
( uslov )? then - izraz : else- izraz
Пример.
min = ( x < y )? x : y ;

Наредба if ( 5 )

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 9 / 35

  • Наредба switchслужи за избор једне наредбе из скупа од
неколико могућих, а на основу вредности неког израза.

Наредба switch

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 10 / 35

  • Резервисана реч defaultможе се појавити само једнапут, што
није посебно назначено.
  • Израз иза резервисане речи switch назива се селектор и мора
бити типа:
1. byte, char, shortили int;
2. Енумерисани тип (од верзије 5);
3. String, као и типа неке од класа-омотача простих типова тј.:
Character, Byte, Shortили Integer (од верзије 7).
  • Вредности (ознаке) које се појављују иза наредбе case морају
бити истог типа као и селектор и међусобно различите.

Наредба switch (2)

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 11 / 35

  • Наредба switchсе извршава на следећи начин:
1. Израчунава се вредност селектора и ако није типa int,
вредност се преводи у тип int.
2. Упоређује се израчуната вредност
са вредностима (ознакама) иза наредбиcase.
3. Ако се деси поклапање извршава се поклапајућа case
наредба.
4. Ако се не поклапа ни са једном case наредбом oм онда се
извршава default наредба.
5. Ако нема наредбе која има ознаку default, наредба после
наредбе switchбиће следећа која се извршава.

Наредба switch (3)

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 12 / 35

  • У уској вези са наредбом switchје наредба break.
  • Следећим дијаграмом описана је синтакса наредбе break:
  • Ако наредба breakне садржи идентификатор, управљање се
преноси на прву следећу наредбу иза наредбе у којој се
налази.

Наредба switch (4)

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 13 / 35

Пример. Уместо:
if ( oper = = ‘ + ’ )
sabrati ( arg1 , arg2 );
else if ( oper == ‘ - ’ )
oduzeti ( arg1 , arg2 );
else if ( oper == ‘ * ’ )
pomnoziti ( arg1 , arg2 );
........................
прегледније је користити:
switch( test ) {
case vrednost1 :
Rezultat1 ;
break;
case vrednost2 :
Rezultat2 ;
break;
......
default:
PodrazumevaniRezultat ; // opciono
}

Наредба switch (5)

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 14 / 35

Пример.
switch ( doba ) {
case ‘p’ :
System. out. println ( “Setnja” );
break;
case ‘l’ :
System. out. println ( “Kupanje” );
break;
case ‘j’ :
System. out. printl ( “Branje grozdja” );
break;
case ‘z’ :
System. out. println ( “Skijanje” );
break;
default:
System. out. println ( “Greska” );
}

Наредба switch (6)

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 15 / 35

Пример.
switch ( doba ) {
case “prolece” :
System. out. println ( “Setnja u prirodi” );
break;
case “leto” :
System. out. println ( “Kupanje” );
break;
case “jesen” :
System. out. println ( Branje voca” );
break;
case “zima” :
System. out. println ( “Skijanje” );
break;
}

Наредба switch (7)

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 16 / 35

Пример.
switch ( broj ) {
case 2 :
case 4 :
f = broj * broj + 3 ;
break;
default:
f = broj ;
}

Наредба switch (7)

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 17 / 35

  • Наредба whileсе још назива наредба циклуса са предусловом.
  • У њој се најпре проверава да ли је испуњен услов и ако јесте
извршавају се наредбе циклуса.
  • Израз у наредби while је логичког типа. Ефекат наредбе whileје
следећи:
1. израчунава се вредност израза;
2. ако је вредност израза истинита,
извршава се наредба и понављају кораци 1. и 2. ;
3. ако је вредност израза неистинита,
завршава се извршавање наредбе while
и прелази се на прву следећу наредбу иза while.

Наредба while

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 18 / 35
Наредба while се извршава на следећи начин:
Пример.
{
...
double x = 5.0 ;
while ( x > 0.1 ) {
x = Math. random ();
System. out. println ( "x=" + x );
}
}

Наредба while (2)

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 19 / 35
  • Наредба do-whileсе још назива наредба циклуса са постусловом.
Синтакса наредбе do-while је следећа:
  • Израз је логичког типа.
  • Извршавање наредбе do-while реализује се преко следећих корака:
1. извршава се наредбa изa резервисане речи do;
2. израчунава се вредност израза у заградама;
3. ако је вредност израза истинита, процес се наставља;
у супротном, прелази се на прву наредбу иза наредбе do-while.

Наредба do-while

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 20 / 35

Наредба do while се извршава на следећи начин:
Пример.
{ ...
do
x = Math. random ();
System. out. println ( "x=" + x );
while ( x < 0.9 );
...
}

Наредба do while (2)

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 21 / 35

  • Наредба forјемоћна наредба за опис циклуса.
  • Најчешће се користи за опис циклуса код којих је број
понављања наредби унапред познат.
  • Синтакса наредбе for је следећа:

Наредба for

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 22 / 35

  • Свака од секција наредбе for може бити изостављена, али знак
;мора постојати.
  • Синтакса секције за иницијализацију и итерацију код наредбе
for је следећа:

Наредба for (2)

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 23 / 35

Наредба forсе извршава на следећи начин:
1. Прво се извршава иницијализациони део петље for:
  • Подешавасе вредноступрављачке променљиве петљеfor.
  • Иницијализацијасе извршава сaмо једанпут.
2. Након иницијализације:
  • Израчунава се вредност израза (ако постоји) који мора бити логичког
типа.
  • Акоизраз не постоји, подразумеванавредност је true.
3. У зависности од вредности израза:
  • Акоимавредност true, извршавасе тело петље, а затимсе извршава
итерацијапетљеи поновосе идена корак2.
  • Уколикоизразимавредностfalse, окончавасе извршавањепетље.

Наредба for (3)

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 24 / 35
  • Извршавање наредбе for показује и следећи дијаграм:
Пример.

{ … for ( int i = 1 ; i <= 10 ; i ++) System. out. println ( ”Ana voli programiranje” ); … }

Наредба for (4)

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 25 / 35
  • Колекцијска наредба forслужи за пролазак кроз колекцију/низ.
  • Притом променљива у наредби for не представља бројач,
већ редом узима вредности елемената низа тј. колекције.
  • Колекцијска наредба forима следећу синтаксу:

Колекцијска наредба for

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 26 / 35
Oвде важи следеће:
< tip elementa > ::= < tip >
< elem > ::= < ime >
< kolekcija > ::= < izraz >
Пример.
{ ...
int n = sc. nextInt ();
double a [] = new double [ n ];
...
double najveci = a [ 0 ];
for ( double elem : a )
if ( elem > najveci )
najveci = elem ;
...
}

Колекцијска наредба for (2)

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 27 / 35
  • Наредба у програмском језику Јава може имати једно или више
обeлежја (лабела) и онда се назива обележеном наредбом.
  • Синтакса обележене наредбе је следећа:
  • Обележена наредба користи се у комбинацији са наредбама break
и continueкада се жели безусловни пренос управљања
на одређено место у програму.

Обележена наредба

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 28 / 35

  • Наредба break је у уској вези не само са наредбом switch,
већ и са наредбама циклуса.
  • Синтакса наредбе breakописана је следећим дијаграмом:
  • Поред тога што се наредба breakможекористити:
1. за излазак из наредбе switch,
2. она се може искористити за излазак из петље,
3. али и за безусловни пренос управљања на обележену
наредбу (под одређеним условима).
Ово представља једнуврста “контролисане” gotoнаредбе.

Наредба break

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 29 / 35

Пример.
  • Да би се прекинуло извршавање наредби унутрашње петље и
вратило се у спољашњу, користи се наредба breakбез обележја
for( int i = 0 ; i < 100 ; i ++) {
for( int j = 0 ; j < 100 ; j ++) {
if ( uslov )
break;
}
}

Наредба break (2)

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 30 / 35

Пример.
  • Да би се прекинуло извршавање наредби обе петље, користи
се наредба breakса обележјем.
...
izlaz :
for( int i = 0 ; i < 100 ; i ++) {
for( int j = 0 ; j < 100 ; j ++) {
if ( uslov )
break izlaz ;
}
}

Наредба break (3)

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 31 / 35
  • Наредба continueје по синтакси слична наредби break.
  • Она се може користити само у наредбама за опис циклуса.
  • Нареба continueје корисна када треба да се настави извршавање
циклуса, уз прескакање одређеног скупа наредби.
  • Помоћу ове наредбе управљање се преноси на израз за проверу
услова изласка из петље.
  • Наредба continueима следећу синтаксу:

Наредба continue

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 32 / 35

Пример.
Да би се прескочио препис оних елемената низа који су једнаки
нули, користи се наредба continueбез обележја.
...
br1 = 0 ;
br2 = 0 ;
while ( br1 < niz. length ) {
if ( niz [ br1 ] = = 0 ){
br1++;
continue;
}
vektor [ br2 ++]= niz [ br1 ++];
}

Наредба continue ( 2 )

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 33 / 35

Пример.
  • Учитавање низа од четири бинарне цифре и спајање учитаних
цифара у један стринг, те приказ стринга.
  • Наставља се са следећом итерацијом петље обележене
обележјем ако цифра није бинарна.
...
String s = "" ;
System. out. println ( "Unesite cetiri binarnе cifrе " );
vrh :
do {
d = sc. nextInt ();
if(( d != 0 )&&( d != 1 ))
continue vrh ;
s += d ;
}
while( s. length ()< 4 );
System. out. println ( "Formiran je binarni string: " + s );

Наредба continue ( 3 )

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 34 / 35

Пример.
  • Наставља се са следећом итерацијом спољне(обележене)
петље.
String text = "Trazimo neki podstring u ovom stringu" ;
String podstring = "pod" ;
boolean pronadjen = false;
int max = text. length () - podstring. length ();
test :
for ( int i = 0 ; i <= max ; i ++) {
int n = podstring. length ();
int j = i ;
int k = 0 ;
while ( n -- != 0 ) {
if ( text. charAt ( j ++) != podstring. charAt ( k ++)) {
continue test ;
}
}
pronadjen = true;
break test ;
}
System. out. println ( pronadjen? "Pronadjen" : "Nije pronadjen" );

Наредба continue ( 4 )

Математички факултет {vvlŠladaf@matf.bg.ac.rsrs 35 / 35

Захвалница

Велики део материјала који је укључен у ову презентацију је

преузет из презентације коју је раније (у време када је он

држао курс Објектно орјентисано програмирање) направио

проф. др Душан Тошић.

Хвала проф. Тошићу што се сагласио са укључивањем тог

материјала у садашњу презентацији, као и на помоћи коју ми

је пружио током конципцирања и реализације курса.