Pre nego što krenemo da studiramo iskaze odlučivanja, podsetio bih vas da pogledate prošli post; Operatori u Java programskom jeziku. Posebno obratite pažnju na operatore za poređenje i logične operatore. Ti operatori će biti osnova za mozganje i kreiranje što boljih i preciznijih iskaza za odlučivanje. Za praktičnu upotrebu, programerima su iskazi za odlučivanje nešto sa čime rade u skoro svakom projektu i prosto je nezamislivo napraviti bilo koji ozbiljniji program bez iskaza za odlučivanje. Ali ono što ja želim da kažem i dodam jeste; koliko ste vi sposobni da što savršenije iskonstruišete neki iskaz za neku odluku u programiranju od toga zavisi i tok vašeg programa ali i celi program. Ono što ste učili do sada jeste kako kompjuteri razmišljaju ali od iskaza odlučivanja vi počinjete da razmišljate kako će vaš program funkcionisati. Ukoliko ste početnik i počinjete sa jednostavnim malim programima; dosta će te praviti uobičajene i jednostavne iskaze koje se podrazumevaju i u tim slučajevima nema mnogo pametovanja, ali kada budete trebali da konstruišete iskaze na osnovu teških i komplikovanih odluka, tu nastupa vaša programerska sposobnost razmišljanja i definitivno će te tada praviti dosta grešaka dok ne dovedete vaše programersko iskustvo do savršenstva. Zato nemojte uzimati iskaze odlučivanja kao nešto banalno i preći preko toga. Već mozgajte malo kako bi ste rešili neke vaše kućne probleme na programerski način. Na primer. Zadnjih meseci mnogo učim Nemački jezik ali u svojoj glavi ja već znam kako bi napravio neku funkciju i stavio u nju precizno iskaze odlučivanja, da mi funkcija prepozna i vrati pravilnu promenu glagola u bilo kojem gramatičkom vremenu. Razmišljam kako bi program radio sa gramatikom Nemačkog jezika. Ne, ja trenutno ne pravim nikakav program za učenje Nemačkog jezika ali kad učim Nemački jezik ja razmišljam kao da ću ga praviti. Zašto?
( Šema - if else statement - if else iskaza, kako se izvršava )
Zato što tako iskusni programeri razmišljaju i kad ne programiraju. Previše godina kodiranja učini to programeru da poboljša i motiviše samog sebe. Kada učite Java programski jezik, reći će vam da upravljačke naredbe se u programskim jezicima koriste za upravljanje tokom izvršavanja programa na osnovu promena stanja u programu. Iskazi odlučivanja su vam samo jedna kategorija upravljačkih naredbi. Upravljačke naredbe se dele na uslovne naredbe, iteracije i skokove. Iskazi za odlučivanje su uslovne naredbe. Ostale kategorije; iteracije su petlje i skokovi su komande koje pomažu da izađete iz petljih i funkcija. Njih ćete učiti kasnije u sledećim postovima. Za sada se koncentrišemo samo na iskaze odlučivanja. Java programski jezik podržava dve vrste iskaza za odlučivanje if else i switch case. Prvi iskaz if else se koristi kada imate manje uslova dok se switch case koristi kada imate više uslova. Zahvaljujući navedenim iskazima vi pomoću njih upravljate izvršavanje programa na osnovu uslova koji su poznati za vreme izvršavanja. Vaše mogućnosti i fleksibilnost zbog korišćenja istih su ogromne, s obzirom da vi možete čak i da u jedan uslov uslovite sa drugim ili više njih. To zovemo granjanje. Ali krenimo redom i skratimo vam muke; praktičnim korišćenjem istih.
If else iskazi
Iskaz if else je iskaz za uslovno granjanje, koja omogućava programu da se tok programa usmeri na jednu ili drugu ili više putanja. Jednostavno rečeno; iskazi odlučivanja su bazirani na uslovima koji određuju kako će dalje programski tog ići. Opšti oblik naredbe if else iskaza mogu biti u tri oblika i izgledaju ovako:
1. Najjednostavniji oblik;
ako je uslov tačan izvrši kod u bloku; ako nije preskoči ceo if iskaz.
If
(uslov) {
izvrši ovaj deo koda;
}
2. If else oblik; ako je
uslov tačan izvrši kod u bloku ali ako nije izvrši kod u else bloku.
If(uslov)
{
izvrši ovaj deo koda;
}
else {
izvrši ovaj deo koda;
}
3. If else if oblik; ako je
uslov tačan izvrši kod u bloku ali ako nije pokušaj drugi uslov else if ako ni
taj uslov nije tačan pokušaj sledeći i sledeći u zavisnosti koliko ih ima; ali
ako nema više else if blokova; izvrši kod u else bloku.
If(uslov)
{
izvrši ovaj deo koda;
}
else if {
izvrši ovaj deo koda;
}
else {
izvrši ovaj deo koda;
}
Obratite
pažnju da u trećem obliku if else iskaza vi možete imati više uslova tj. else if
blokova. Što se tiče uslova; to što kucate u malim zagradama, bez obzira koliko
vaši uslovi bili kompleksni oni se na kraju svode na logičku vrednost tipa bool
(boolean) true – tačno i false – netačno. Što znači ako je uslov true – tačno onda
će se izvršiti deo koda, ali ako je false – netačno onda se kod u bloku neće izvršiti.
Na primer, ako je korisnikov unos broj; izvrši sabiranje ali ako nije preskoči.
Inače će doći do greške jer ne možete sabirati brojeve i slova. Da bi vam to
sve bilo jasnije, pređimo na praktičan deo. Pokrenite novi program, nazovite ga
ifelse i ukucajte sledeći deo koda:
import java.util.Scanner;
public class elseif {
public static void main(String[] args) {
Scanner
scan = new Scanner(System.in);
System.out.println("Enter a character: ");
char c = scan.next().charAt(0);
if(Character.isUpperCase(c)) {
System.out.println("The character is an uppercase letter.");
}
else if(Character.isLowerCase(c)) {
System.out.println("The character is a lowercase letter.");
}
else if(Character.isDigit(c)) {
System.out.println("The character is a digit letter");
}
else {
System.out.println("The character is not alphanumeric.");
}
}
}
Kao
što vidite u kodu; od korisnika se očekuje da unese jedan karakter sa
tastature. Mi ne znamo šta će on uneti. Možda on hoće da unese neki broj, ali
greškom ukuca slovo ili neki specijalni znak. Da bi smo mi sprečili pravljenje
greške u našem programu, mi koristimo u ovom slučaju treći oblik iskaza if else
odlučivanja. Ako korisnik unese slovo mi ćemo ispisati u terminalu da je on
otkucao slovo. U nekom ozbiljnijem programu umesto ovakvih ispisa mi bi smo
korisnika obavestili da je pogrešio i ponovo mu ponudili mogućnost da ponovo
unese karakter ili čak stalno bi smo ga pitali da unese karakter dok ne ukuca broj
ukoliko nam od njega treba broj. I kad bi to uradio, tek onda bi naš program se
izvršavao dalje. Kao što vidite vi odlučujete uz pomoć if else iskaza kako će
se program izvršavati. Kad izvršimo ovaj program u zavisnosti od unosa
korisnika, rezultat će biti sličan:
Enter a character:
m
The character is a lowercase letter.
Kako
se kreira prethodni program možete pogledati i na video-u:
( Java for Beginners - 12. If Else Statement )
Switch
case iskazi
U prethodnom programu smo videli kako se koristi iskazi odlučivanja kada imate jedan, dva ili više uslova. Ali šta da radite kada zaista imate više uslova, recimo 7 kao dana u nedelji ili 12 kao meseci u godini. Vi možete da koristite if else iskaz odlučivanja sa mnoštvom else if blokova, ali za to postoji switch case iskazi sa kojim ćete to odraditi nešto jednostavnije dok će se i vaš program izvršavati nešto brže.
( Šema - switch case statement - switch case iskaza, kako se izvršava )
switch(vrednost) {
case
1:
izvrši ovaj deo koda ako je vrednost 1
break;
case
2:
izvrši ovaj deo koda ako je vrednost 2
break;
default:
izvrši ovaj deo koda ako vrednost ne
ispunjava ni jedan uslov
break;
}
Kao što možete videti switch case iskaz je jednostavan kada radite sa više uslova. Naravno ovde nije neophodno da blok case mora biti broj. Može biti i slovo ili neki logički uslov. Ako neki case blok ima vrednost istu vrednost koja se ispituje, deo koda u tom bloku će se izvršiti. Ono što je za iskaz odlučivanja if else blok else to je default u switch case iskazu. Imajte samo u vidu da vaš switch case iskaz ne mora imati uopšte default blok. Ali je poželjno da ima. Pokrenite novi program i nazovite ga switch. Unesite sledeći kod:
import java.util.Scanner;
public class switchstatement {
public static void main(String[] args) {
Scanner
scan = new Scanner(System.in);
System.out.println("Enter an integer from 1 to 7: ");
int day = scan.nextInt();
switch (day) {
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
case 3:
System.out.println("Wednesday");
break;
case 4:
System.out.println("Thursday");
break;
case 5:
System.out.println("Friday");
break;
case 6:
System.out.println("Saturday");
break;
case 7:
System.out.println("Sunday");
break;
default:
System.out.println("Your input is not an integer from 1 to 7! ");
break;
}
}
}
Kao što možete videti u prethodnom kodu od korisnika se traži da unese jedan ceo broj od 1 do 7. Program treba da ispita čak 7 uslova i da na osnovu njih prikaže koji dan je u sedmici na Engleskom jeziku. Ovaj program je prilagođen našem području pa zato prvi dan u sedmici je ponedeljak, inače za američko područje, prvi dan u sedmici je nedelja. Kad korisnik unese broj od 1 do 7; switch case iskaz će odraditi svoj posao jednostavnije nego da ste pisali čak 6 else if blokova u if else iskazu odlučivanja. I naravno, ovde koristimo default blok ukoliko korisnik otkuca veći ili manji broj od traženog. Kada pokrenemo program rezultat će zavisiti od korisnikovog unosa podataka.
Enter an integer from 1 to 7:
3
Wednesday
Kako
se kreira prethodni program možete pogledati i na video-u:
( Java for Beginners - 13. Switch Case Statement )
Mesečni kalendar
Sad se pitate šta je ovo; kakve veze ima mesečni kalendar sa iskazima odlučivanjima. E pa ja sam odlučio pošto ste dobri da vas nagradim još jednim malim programom. Ali u ovom slučaju u programu imate neke delove koda koje još niste učili, ali će te ih učiti u jednim od narednih postova poput nizova. To opet ne treba da vas sprečava da zakoračite i u kod koji ne razumete. U pravim poslovima će te se često susretati sa kodom i stvarima za koji nikad niste ni videli. To ne treba da vam bude prepreka. Otkucajte ovaj kod u potpunosti ali obratite pažnju na profesionalno korišćenje komplikovanog if else iskaza za odlučivanje. Program nazovite monthcalendar.
import java.util.*;
public class MonthCalendar {
public static void main(String[] args) {
int year;
int spaces;
int month;
Scanner
scan = new Scanner(System.in);
// Prompts user to enter year
System.out.println("Enter a year: ");
year = scan.nextInt();
// Prompts user to enter month
System.out.println("Enter a month: ");
month = scan.nextInt();
scan.close();
//
Calculation the first day of that month
Calendar cal = Calendar.getInstance();
cal.set(year, month - 1, 1);
int day = cal.get(Calendar.DAY_OF_WEEK) - 1;
// The
name of month
String[] months = {
"", "January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
};
// The number of day in month
int []days = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
//
Check for a leap year
if((((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) && month == 2)
days[month] = 29;
//
Print the calendar header
//
Display months and a year
System.out.println("
" + months[month] + " " + year);
//
Display the lines
System.out.println("_____________________________________________");
System.out.println(" Sun Mon
Tue Wed Thu
Fri Sat");
//
Space required
spaces = day;
//
Print the calendar
for (int i = 0; i < spaces; i++)
System.out.print(" ");
for (int i = 1; i <= days[month]; i++) {
System.out.printf(" %4d ", i);
if (((i + spaces) % 7 == 0) || (i == days[month])) System.out.println();
}
System.out.println();
}
}
Pogledajte
prethodni kod i pokušajte sami zaključiti kako se tok programa izvršava. Kad pokrenete
izvršavanje ovog programa, dobićete rezultat u zavisnosti od korisnikovog unosa
podataka.
Enter a year:
2021
Enter a month:
1
January 2021
_____________________________________________
Sun Mon Tue
Wed Thu Fri
Sat
1 2
3 4 5
6 7 8
9
10 11 12
13 14 15
16
17 18 19
20 21 22
23
24 25 26
27 28 29
30
31
Nema komentara:
Objavi komentar