Wednesday, November 18, 2020

Iskazi odlučivanja if else i switch case u Java programskom jeziku

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 )

Iskazom switch case Vi jednostavno na odnosu vrednosti izraza lako usmeravate izvršavanje tok programa na određeni deo koda. Opšti oblik naredbe switch case izgleda ovako:

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

 

 Kako kreiranje navedenog programa izgleda, možete pogledati i na video-u:

 


( Java for Beginners - 14. Month Calendar )

 

 

 

 

 

 

   

No comments:

Post a Comment