Detaljno objašnjenje Java kontrolnih struktura toka: lako naučite if switch while for
"Erge, koje sve postoje kontrolne strukture toka?" Na Sanmejino lice bio je naslućen sladak osmeh; počela je s nestrpljenjem da iščekuje ono što će učiti, upravo ono što me raduje.
"Na primer if-else, switch, for, while, do-while, return, break, continue itd.; hajde da ih redom upoznamo."
01. U vezi sa if-else

1) if iskaz
Oblik if iskaza je sledeći:
if(uslov){
// ako je uslov true, izvršava se ovaj blok koda
}Da nacrtamo dijagram toka:

Hajde da napišemo primer:
int age = 20;
if (age < 30) {
System.out.println("Mladalačke godine");
}Izlaz:
Mladalačke godine2) if-else iskaz
Oblik if-else iskaza je sledeći:
if(uslov){
// blok koda koji se izvršava kada je uslov true
}else{
// blok koda koji se izvršava kada je uslov false
}Da nacrtamo dijagram toka:

Hajde da napišemo primer:
int age = 31;
if (age < 30) {
System.out.println("Mladalačke godine");
} else {
System.out.println("Godine zrelosti");
}Izlaz:
Godine zrelostiPored ovog primera, postoji i primer za određivanje prestupne godine (deljivo sa 4 ali ne sa 100, ili deljivo sa 400):
int year = 2020;
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
System.out.println("Prestupna godina");
} else {
System.out.println("Obična godina");
}Izlaz:
Prestupna godinaAko je iskaz koji se izvršava jednostavan, može se koristiti ternarni operator umesto if-else: ako je uslov true, vraća se vrednost posle ? a pre :; ako je uslov false, vraća se vrednost posle :.
int num = 13;
String result = (num % 2 == 0) ? "Paran" : "Neparan";
System.out.println(result);Izlaz:
Neparan3) if-else-if iskaz
Oblik if-else-if iskaza je sledeći:
if(uslov1){
// kod koji se izvršava kada je uslov1 true
}else if(uslov2){
// kod koji se izvršava kada je uslov2 true
}
else if(uslov3){
// kod koji se izvršava kada je uslov3 true
}
...
else{
// kod koji se izvršava kada su svi gorenavedeni uslovi false
}Da nacrtamo dijagram toka:

Hajde da napišemo primer:
int age = 31;
if (age < 30) {
System.out.println("Mladalačke godine");
} else if (age >= 30 && age < 40 ) {
System.out.println("Godine zrelosti");
} else if (age >= 40 && age < 50 ) {
System.out.println("Godine razumevanja");
} else {
System.out.println("Spoznaja sudbine");
}Izlaz:
Godine zrelosti4) Ugnježdeni if iskaz
Oblik ugnježdenog if iskaza je sledeći:
if(spoljašnjiUslov){
// kod koji se izvršava kada je spoljašnjiUslov true
if(unutrašnjiUslov){
// kod koji se izvršava kada je unutrašnjiUslov true
}
}Da nacrtamo dijagram toka:

Hajde da napišemo primer:
int age = 20;
boolean isGirl = true;
if (age >= 20) {
if (isGirl) {
System.out.println("Zakonski uzrast za brak devojke");
}
}Izlaz:
Zakonski uzrast za brak devojke02. switch iskaz
switch iskaz služi za proveru jednakosti između promenljive i više vrednosti. Tip promenljive može biti:
- bajt, short, char, int: osnovni celobrojni tipovi.
- String: tip string.
- Enum tip: sopstveni tip enum.
- Wrapper klase: poput Byte, Short, Character, Integer.
Pogledajmo oblik switch iskaza:
switch(promenljiva) {
case vrednost1:
// kod koji se izvršava nakon poklapanja sa vrednost1;
break; // ova ključna reč je opciona
case vrednost2:
// kod koji se izvršava nakon poklapanja sa vrednost2;
break; // ova ključna reč je opciona
......
default: // ova ključna reč je opciona
// kod koji se izvršava kada se ne poklapa ni sa jednom vrednošću
}- Promenljiva može imati 1 ili N vrednosti.
- Tip vrednosti mora odgovarati tipu promenljive i vrednost mora biti određena.
- Vrednost mora biti jedinstvena, ne sme se ponavljati, inače će doći do greške pri prevođenju.
- break ključna reč je opciona; ako je nema, izvršava se sledeći case, a ako je ima, izlazi se iz switch iskaza.
- default ključna reč je takođe opciona.
Da nacrtamo dijagram toka:

Hajde da uzmemo primer:
int age = 20;
switch (age) {
case 20 :
System.out.println("Škola");
break;
case 24 :
System.out.println("Posao u Sužou");
break;
case 30 :
System.out.println("Posao u Luojangu");
break;
default:
System.out.println("Nepoznato");
break; // može se izostaviti
}Izlaz:
ŠkolaKada dve vrednosti treba da izvrše isti kod, taj kod se može zapisati u sledećoj case naredbi, dok prethodna case naredba ostaje prazna; pogledajmo primer:
String name = "Chenmo Wang Er";
switch (name) {
case "James":
System.out.println("Košarkaš");
break;
case "Mourinho":
System.out.println("Fudbalski trener");
break;
case "Chenmo Wang Er":
case "Chenmo Wang San":
System.out.println("Ljubitelj stonog tenisa");
break;
default:
throw new IllegalArgumentException(
"Ime nema poklapanja");
}Izlaz:
Ljubitelj stonog tenisaEnum kao promenljiva switch iskaza je takođe čest; pogledajmo primer:
public class SwitchEnumDemo {
public enum PlayerTypes {
TENNIS,
FOOTBALL,
BASKETBALL,
UNKNOWN
}
public static void main(String[] args) {
System.out.println(createPlayer(PlayerTypes.BASKETBALL));
}
private static String createPlayer(PlayerTypes playerType) {
switch (playerType) {
case TENNIS:
return "Teniser Federer";
case FOOTBALL:
return "Fudbaler Ronaldo";
case BASKETBALL:
return "Košarkaš James";
case UNKNOWN:
throw new IllegalArgumentException("Nepoznato");
default:
throw new IllegalArgumentException(
"Tip sportiste: " + playerType);
}
}
}Izlaz:
Košarkaš JamesAli switch ne podržava tipove long, float, double, zato što:
- long je 64-bitni celi broj, nije u opsegu za koji je switch prvobitno projektovan (32-bitni int u većini slučajeva je dovoljan).
- float i double su brojevi u pokretnom zarezu; njihovo poređenje nije jednostavno i direktno kao kod celih brojeva, jer postoji greška u preciznosti.
03. for petlja

1) Obična for petlja
Obična for petlja se može podeliti na 4 dela:
Početna promenljiva: početni uslov kada petlja počinje da se izvršava.
Uslov: uslov koji se proverava pri svakom izvršavanju petlje; ako je true, izvršava se telo petlje; ako je false, izlazi se iz petlje. Naravno, uslov je opcion; ako ga nema, petlja se izvršava zauvek.
Telo petlje: blok koda koji petlja izvršava svaki put, sve dok uslov ne postane false.
Uvećanje/umanjenje: način na koji se menja početna promenljiva.
Pogledajmo oblik obične for petlje:
for(početnaPromenljiva;uslov;uvećanje/umanjenje){
// telo petlje
}Da nacrtamo dijagram toka:

Hajde da uzmemo primer:
for (int i = 0; i < 5; i++) {
System.out.println("Chenmo Wang San je tako lepa");
}Izlaz:
Chenmo Wang San je tako lepa
Chenmo Wang San je tako lepa
Chenmo Wang San je tako lepa
Chenmo Wang San je tako lepa
Chenmo Wang San je tako lepa"Oj, Erge, zaista na sve načine me hvališ."
"Baš i ne, Sanmej, zar ne vidiš da zapravo hvalim sebe? Petlje se mogu i ugnježdavati, pa se može ispisati još zanimljivije, hoćeš li da vidiš?"
"Hoću, hoću!"
"Pazi."
for (int i = 0; i < 5; i++) {
for (int j = 0;j<= i;j++) {
System.out.print("❤");
}
System.out.println();
}Šta će to ispisati?
❤
❤❤
❤❤❤
❤❤❤❤
❤❤❤❤❤"O, neverovatno, Erge."
"Hehe."
2) for-each
for-each petlja se obično koristi za obilazak nizova i kolekcija; pravila korišćenja su još jednostavnija nego kod obične for petlje — nema početne promenljive, nema uslova, nema indeksa za uvećavanje ili umanjenje. Pogledajmo sintaksu:
for(tipElementa element : niz ili kolekcija){
// kod koji se izvršava
}Pogledajmo primer:
String[] strs = {"Chenmo Wang Er", "Zanimljiv programer"};
for (String str : strs) {
System.out.println(str);
}Izlaz:
Chenmo Wang Er
Zanimljiv programer"O, Erge, počeo si da hvališ samog sebe."
"Hehe, Sanmej, kad tako kažeš, brat će se postideti."
3) Beskonačna for petlja
"Sanmej, hoćeš li da iskusiš moć beskonačne for petlje, odnosno beskonačne petlje?"
"Erge, kakve će to posledice imati?"
"Hajde, videćeš čim pogledaš."
for(;;){
System.out.println("Ne može da stane....");
}Izlaz:
Ne može da stane....
Ne može da stane....
Ne može da stane....
Ne može da stane....Jednom kada se pokrene, više ne staje, osim ako se ne zaustavi prinudno.
04. while petlja
Pogledajmo oblik while petlje:
while(uslov){
// telo petlje
}Da nacrtamo dijagram toka:

Hajde da uzmemo primer:
int i = 0;
while (true) {
System.out.println("Chenmo Wang San");
i++;
if (i == 5) {
break;
}
}"Sanmej, pogodi koliko puta će se ispisati?"
"Pet puta?"
"Tačno. Zaista si pametna."
Chenmo Wang San
Chenmo Wang San
Chenmo Wang San
Chenmo Wang San
Chenmo Wang San"Sanmej, hoćeš li da iskusiš moć beskonačne while petlje, odnosno beskonačne petlje?"
"Erge, kakve će to posledice imati?"
"Hajde, videćeš čim pogledaš."
while (true) {
System.out.println("Ne može da stane....");
}Izlaz:
Ne može da stane....
Ne može da stane....
Ne može da stane....
Ne može da stane....Ako se uslov while postavi na true i u telu petlje nema break ključne reči, jednom kada se program pokrene, uopšte ne staje, osim ako se ne zaustavi prinudno.
05. do-while petlja
Pogledajmo oblik do-while petlje:
do{
// telo petlje
}while(uslov);Da nacrtamo dijagram toka:

Hajde da uzmemo primer:
int i = 0;
do {
System.out.println("Chenmo Wang San");
i++;
if (i == 5) {
break;
}
} while (true);"Sanmej, pogodi koliko puta će se ispisati?"
"Pet puta?"
"Tačno. Zaista si pametna."
Chenmo Wang San
Chenmo Wang San
Chenmo Wang San
Chenmo Wang San
Chenmo Wang San"Sanmej, hoćeš li da iskusiš moć beskonačne do-while petlje..."
"Erge, opet; već mi je dosta."
"Hajde, reda radi, samo se pretvaraj da gledaš."
do {
System.out.println("Ne može da stane....");
} while (true);Izlaz:
Ne može da stane....
Ne može da stane....
Ne može da stane....
Ne može da stane....Ako se uslov do-while postavi na true i u telu petlje nema break ključne reči, jednom kada se program pokrene, uopšte ne staje, osim ako se ne zaustavi prinudno.

06. break
break ključna reč se obično koristi za prekid petlje ili switch iskaza; pod zadatim uslovom prekida tekući tok programa. Ako je u pitanju unutrašnja petlja, prekida samo nju.
break ključna reč se može koristiti u svim vrstama petlji, na primer u for, while i do-while petljama.
Da nacrtamo dijagram toka da osetimo:

Primer u for petlji:
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break;
}
System.out.println(i);
}Primer u ugnježdenoj for petlji:
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i == 2 && j == 2) {
break;
}
System.out.println(i + " " + j);
}
}Primer u while petlji:
int i = 1;
while (i <= 10) {
if (i == 5) {
i++;
break;
}
System.out.println(i);
i++;
}Primer u do-while petlji:
int j = 1;
do {
if (j == 5) {
j++;
break;
}
System.out.println(j);
j++;
} while (j <= 10);Primer u switch iskazu:
switch (age) {
case 20 :
System.out.println("Škola");
break;
case 24 :
System.out.println("Posao u Sužou");
break;
case 30 :
System.out.println("Posao u Luojangu");
break;
default:
System.out.println("Nepoznato");
break; // može se izostaviti
}07. continue
Kada u for ili (do)while petlji treba odmah da pređemo na sledeći krug, možemo koristiti continue ključnu reč; obično se koristi za preskakanje tela petlje pod zadatim uslovom, a ako je petlja ugnježdena, preskače samo tekuću petlju.
Hajde da uzmemo primer:
for (int i = 1; i <= 10; i++) {
if (i == 5) {
// koristi se continue ključna reč
continue;// 5 će biti preskočeno
}
System.out.println(i);
}Izlaz:
1
2
3
4
6
7
8
9
10"Erge, 5 je zaista preskočeno."
"Naravno. Inače bi to bio bug."
Još jedan primer sa ugnježdenim petljama.
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i == 2 && j == 2) {
// kada je i=2, j=2, preskoči
continue;
}
System.out.println(i + " " + j);
}
}Šta će to ispisati?
1 1
1 2
1 3
2 1
2 3
3 1
3 2
3 3"2 2" nije ispisano, preskočeno je.
Pogledajmo i primer korišćenja continue u while petlji:
int i = 1;
while (i <= 10) {
if (i == 5) {
i++;
continue;
}
System.out.println(i);
i++;
}Izlaz:
1
2
3
4
6
7
8
9
10Napomena: ako se u if uslovu izostavi "i++", program će ući u beskonačnu petlju i stalno nastaviti (continue).
Na kraju, pogledajmo i primer korišćenja continue u do-while petlji:
int i=1;
do{
if(i==5){
i++;
continue;
}
System.out.println(i);
i++;
}while(i<=10);Izlaz:
1
2
3
4
6
7
8
9
10Napomena: isto tako, ako se u if uslovu izostavi "i++", program će ući u beskonačnu petlju i stalno nastaviti (continue).
08. Rezime
Ovaj članak sveobuhvatno objašnjava Java kontrolne strukture toka, uključujući if, switch, while, for i druge. Čitanjem ovog članka upoznaćete se sa osnovnim pojmovima, strukturom sintakse i scenarijima korišćenja Java kontrolnih struktura toka, što će vam pomoći da u stvarnom programiranju fleksibilnije koristite različite kontrolne strukture.
