Saturday, September 22, 2012

Flow Control statements (part I) - Selection Statements

කොහොමද යාලුවනේ... මේ සතියෙ එක දිගට වැඩ ගොඩක් වැටුණ නිසා බ්ලොග් එක ලියන්න ටිකක් පරක්කු වුණා. ඒ නිසා අපි ඉක්මනටම පාඩමට බහිමු.අද කතා කරන්නෙ Flow control statements ගැන. අපි දැනට ඉගෙනගෙන තියෙන දේවල් අනුව අපි program එකක් ලියල run කරාම, main method එකේ පලවෙනි statement එකෙන් පටන් අරගෙන එකින් එක පිළිවෙලට execute වීගෙන යනව. අපි දැනට කරපු program වලට ඒක ප්‍රශ්නයක් වුණේ නැහැ. නමුත් සමහර වෙලාවට අපිට අවශ්‍ය වෙනව මේ එකදිගට execute වීගෙන යන ක්‍රමය වෙනස් කරගන්න. අපිට program එකක් ලියද්දි අවශ්‍ය වෙන්න පුළුවන් යම්කිසි ප්‍රකාශනයක ප්‍රතිඵලය අනුව දෙයක් සිදුවෙන්න, එහෙම නැත්තම් යම් කිසි ක්‍රියාවක් කිහිප වාරයක් සිදු කරගන්න. මෙන්න මේ වගේ දේවල් කරගන්න අපිට flow control statements යොදාගන්න පුළුවන්. අපි බලමු java වල තියෙන flow control statements මොනවද කියල. Java වල තියෙන මේ flow control statements කෙරෙන ක්‍රියාව අනුව selection statements (decision making statements), looping statements හා branching statements විදිහට වර්ග කරන්න පුළුවන්. අපි අද කතා කරන්න යන්නෙ selection statements ගැන.

if-then-else Statement



Syntax :

if(condition){
     Statement;
}else{
     Statement;
}

අපි මුලින්ම කතා කරන්න යන්නෙ if-then-else statement එක ගැන. මේක selection statement එකක්. මේක භාවිත කරන්නෙ යම්කිසි ප්‍රකාශනයක අගය අනුව යම් ක්‍රියාවක් කරන්න ඕන අවස්ථාවකදී. උදාහරණයක් විදිහට අපි මෙහෙම ගමු අපිට අවශ්‍යයි program එකක් ලියන්න user විසින් ඇතුලත් කරන අගයක් ධනද, සෘණද කියල කියන program එකක්. පහල තියෙන්නෙ code එක.





මේ program එක කරද්දි අපි keyboard එකෙන් input එකක් අරගෙන තියෙනව. අපි කලින් එහෙම input එකක් අරගෙන නැති නිසා මම මුලින් ඒ ගැන පොඩ්ඩක් කියන්නම්. Line 1,Line 2 හා Line 3 අපිට අලුත් statement තුනක්. මේව ගැන අපිට ඉස්සරහට ඉගෙනගන්න පුළුවන්. අපි program එකකට user ගෙන් input එකක් ගන්නවනම් Line 1 හා Line 2 මේ program එකේ විදිහටම තියෙන්න ඕනෙ. ඒ statement දෙක ගැන දැන්ම තේරුම් කරන්න තරම් දැනුමක් ඔයාලට නැති නිසා ඒ ගැන මම පස්සෙ කියන්නම්. දැනට ඒ lines දෙක ඒ විදිහටම type කරන්න. Line 3 එකේ අපි කරල තියෙන්නෙ int variable එකක් හදල input කියල ඒකට අපි user ගෙන් ගන්න input එක assign කරල තියෙනව. අපි nextInt() කියල type කරල තියෙන්නෙ අපි ගන්නෙ int අගයක් නිසා. අපි වෙනත් data type එකක අගයක් ගන්නවනම් nextByte() , nextShort() , nextFloat() වගේ methods භාවිත කරන්න පුළුවන්.

හරි අපි දැන් if-then-else statement එක ගැන බලමු. If කියල තියෙන තැනින් තමයි අපේ if-then-else statement එක පටන් ගන්නෙ. අපි වරහන් ඇතුලෙ දීල තියෙනව අපිට සසඳන්න අවශ්‍ය ප්‍රකාශනය. අපි එතනදි බලනව අපි දීපු input කියන අගය 0ට වඩා විශාලද කියල. ඊට පස්සෙ සඟල වරහනක් ඇරල තියෙනව. මේ සඟල වරහනෙන් පස්සෙ අපිට දෙන්න පුළුවන් අර වරහන් ඇතුලෙ තිබුන ප්‍රකාශනය සත්‍ය නම් execute වෙන්න ඕන statement ටික. මෙතන නම් එකයි තියෙන්නෙ. ඊළඟට සඟල වරහන වහල තියෙනව. එතනින් ප්‍රකාශනය සත්‍ය වුනාම වෙන්න ඕනෙ statements ටික ඉවරයි. ඊළඟට else කියල දීල සඟල වරහනක් ඇරල තියෙනව මෙතන අපිට දෙන්න පුළුවන් ප්‍රකාශනය සත්‍ය නොවුනම execute වෙන්න අවශ්‍ය statement ටික. ඊළඟට සඟල වරහන වැහුවට පස්සෙ අපේ if-then-else statement එක ඉවරයි. මෙතන ඇත්තටම if-then-else statement එකක් නෑ. තියෙන්නෙ if-else statement එකක්. මෙතනදි අපිට else කොටස අවශ්‍ය නැත්තම් ඒ ටික අයින් කරන්නත් පුළුවන්. හිතන්නකො අපිට අවශ්‍ය සංඛ්‍යාව ධනද කියල බලාගන්න විතරයි අවශ්‍ය කියල. එතකොට අපේ statement එක මෙහෙම ලියන්නත් පුළුවන්.



දැන් හරි. හැබැයි ඔයාලට පෙනුනෙ නැද්ද මේ program එකේ අවුලක් තියෙනව කියල? කවුරුහරි 0 enter කලොත්???? ඒකටත් negative කියල වැටෙනව නේද? අපි දන්නවනෙ 0ට ධන/සෘණ භාවයක් නෑ කියල. අපි මොකද දැන් කරන්නෙ? අපිට මෙහෙම පුළුවන්. අපිට පුළුවන් මුලින්ම බලන්න සංඛ්‍යාව ධනද කියල, ඊළඟට බලන්න පුළුවන් සංඛ්‍යාව සෘණද කියල ඒ දෙකම නැත්තං සංඛ්‍යාව 0නෙ. මේකට අපිට සම්පූර්ණ if-then-else statement එක යොදාගන්න පුළුවන්. මම ආපහු සම්පූර්ණ program එකම ලියන්නෙ නැතුව statement එක විතරක් ලියල පැහැදිලි කරන්නම්. ඔයාලට පුලුවන් program එක වෙනස් කරල බලන්න. 




මේ statement එකේ වෙනස වෙලා තියෙන්නෙ අලුතින් else if කියල කෑල්ලක් එකතු වෙලා තියෙනව. අපිට condition එකකට වැඩි ගණනක් සංසන්දනය කරන්න අවශ්‍ය වුණාම else if statement එක යොදාගන්න පුළුවන්. මේ තියෙන්නෙ සම්පූර්ණ if-then-else statement එකක්. මුලින්ම (IF) if condition එක check කරනව, ඒක අසත්‍ය නම් ඊළඟට (THEN) else-if condition එක check කරනව, ඒකත් අසත්‍ය නම් (ELSE) else statement එක ක්‍රියාත්මක කරනව.

අපි if-then-else statement එකක් අපේ program එකට ඇතුලත් කරනකොට දැනගන්න ඕන කරුණු කිහිපයක් තියෙනව.
  1. එක if එකකට තියෙන්න පුළුවන් එක else එකක් පමණයි. නමුත් else-if ඕනතරම් තියෙන්න පුළුවන්. 
  2. if , else if සහ else statements එකකට පසු එකක් වශයෙන් තියෙන්න ඕනෙ. ඒ කියන්නෙ මේ statement අතරමැද වෙනත් statement තියෙන්න බෑ. 
  3. else if statement කිහිපයක් තියෙන අවස්තාවලදී ඒවා තියෙන පිළිවෙලට තමයි execute වෙන්නෙ. ඒ වගේම තමයි එක else if statement එකක් හරි execute වුණොත් ඊට පසුව තියෙන statements සලකා බලන්නෙ නෑ. මේක පැහැදිලි වෙන්න පහල තියෙන code එක බලන්නකො. 


මේ ලියල තියෙන්නෙ ලකුණු ප්‍රමාණය ඇතුලත් කරාම අපේ grade එක ලබාදෙන program එකක්. අපි හිතමු අපේ ලකුණු සංඛ්‍යාව 66යි කියල. මුලින්ම check කරන්නෙ if condition එක. ඒක වැරදි නිසා ඊළඟ else if statement එකට යනව. එතන condition එක නිවැරදි නිසා වරහන් ඇතුලෙ තියෙන statement එක execute වෙනව. ඊටපස්සෙ මොකද වෙන්නෙ? අපි ඊළඟ else if condition එක බැලුවොත් ඒකත් සත්‍යයි මොකද 66, 55ට වඩා වැඩියි නෙ. නමුත් මුලින් එක else if එකක් execute වුණ නිසා ආපහු අනිත් ඒව හරිද වැරදිද කියල බල බල ඉන්නෙ නෑ. කෙලින්ම ඒ block එකේ අවසානයට යනව. (Program එකේ අඩංගු වෙන විශේෂ code කොටසකට අපි block එකක් කියල කියනව. උදා : if-else block)


හොඳයි අපි if-then-else statement ගැන කතා කරල ඉවරයි. අපි program දෙකක් ගැනත් කතා කරපු නිසා මම හිතුව programming කරන්න ආස අයට පොඩි අභ්‍යාසයක් දෙන්න.

Exercise 1:
User input කරන පූර්ණ සංඛ්‍යා තුනක්, විශාලම අගයේ සිට කුඩාම අගය දක්වා පිලිවෙලින් display කරන්න program එකක් ලියන්න. පහල තියෙනව උදාහරණයක්.

Input : 10 , 20, 17
Output : 20 , 17, 10

ඉඟිය : මුලින්ම variable තුනකට user ගෙ input තුන ගන්න ඕනෙ. ඒකට මම කියල දුන්න ක්‍රමයේ Line 1 සහ Line 2 කියන දෙක ඒ විදිහටම type කරල variable තුනටම වෙනවෙනම inputs ගන්න.

int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();

ඊළඟට if-then-else statement භාවිත කරල සංඛ්‍යා තුන පිළිවෙලට හදන්න. හැබැයි conditions (a < b < c) වගේ ලියන්න බෑ. මෙතන expression දෙකක් තියෙනව. මතකනෙ මම කිව්වා Boolean expression දෙකක් සම්බන්ධ කරන්න conditional operators භාවිත වෙනව කියල. ඒ නිසා conditional operators භාවිත කරන්න වෙනව මේ program එක ලියද්දි. ඒ පාඩම කියවන්න මෙතනින් යන්න.

ඔයාල මේ program එක කරල source code එක comment එකක් විදිහට බ්ලොග් එකේ හෝ අපේ අලුත්ම facebook group එකේ දැම්මොත් මම ඒකෙ වැරදි අඩුපාඩු එහෙම තියෙනවනම් කියල දෙන්න පුළුවන්. ඒ වගේම මේ ගැන ගැටළුවක් තියෙනවනම් ඒ ගැනත් බ්ලොග් එකේ හෝ group එකේ දාන්න.

The switch statement

Syntax :

switch(variable){
       case condition : statement;
       case condition : statement;
       --------------------------
       --------------------------
}

Switch statement එකත් අයත් වෙන්නෙ selection statements ගණයට. if-then-else statement එකක statements ගොඩක් තියෙන අවස්ථාවලදි ඒ වෙනුවට භාවිත කරන්න පුළුවන් statement එකක් තමයි මේක. නමුත් මතක තියාගන්න ඕනෙ අපි if-then-else statement වලින් කරන හැම program එකක්ම switch වලින් කරන්න බෑ. Programmers ල විදිහට අපි දැනගන්න ඕනෙ අපිට වඩාත් සුදුසු මොන ක්‍රමයද කියල. අපි program එකක් හරහාම switch statement එක යොදාගන්න විදිහ බලමු.





මෙතනදි අපි කරල තියෙන්නෙ month කියන variable එකේ අගයට අනුව මාසය display කරන program එකක්. මේක user input එක දෙන විදිහට හදාගන්නත් පුළුවන්. මම ඒ ක්‍රමය කියල දීල තියෙන නිසා ඔයාලට ලේසියෙන්ම ඒක කරගන්න පුළුවන්. අපි බලමු switch statement එක භාවිත කරන්න පුළුවන්. switch type කරල වරහන් ඇතුලෙ අපි සලකන variable එක type කරනව. මෙතනදි අපි සලකන්නෙ month කියන variable එකේ අගය නිසා month කියල දීල තියෙනව. ඊළඟට තමයි statements ටික ලියන්නෙ. අපි මේකෙදි statements ලියන්නෙ cases වල. Case එකක් ලියන විදිහ program එකෙන් බලාගන්න පුළුවන්. case එක හදාගෙන colon (:) ලකුණෙන් පස්සෙ තමයි අපේ statement එක ලියන්නෙ. මේ program එකේ අපි statement එක විදිහට monthString කියන variable එකට value එකක් දීම තමයි කරල තියෙන්නෙ. මෙතන statement එකකට වඩා type කරන්නත් පුළුවන්. සාමාන්‍යයෙන් අපි case එකක අවසාන statement එක විදිහට break; කියන statement එක ලියනව.

Program එක switch block එකට ඇතුල් වුනාට පස්සෙ අදාළ variable එකේ අගයට සමාන case එක හොයල එම case එකේ ඉඳං පහල තියෙන cases ඔක්කොම run කරනව. නමුත් අපි case එකක break; පාවිච්චි කරල තිබුණොත් එතනින් එහාට cases run නොවී switch block එකෙන් ඉවත් වෙනව. මේ නිසා තමයි අපි සාමාන්‍යයෙන් සෑම case එකක් අවසානයේම break; statement එක යොදන්නෙ. අපි switch statement එකක් program එකට ඇතුලත් කරනකොටත් දැනගන්න ඕන කරුණු කිහිපයක් තියෙනව.
  1. Switch statement එකක භාවිත කරන්න පුළුවන් integer variable එකක් හෝ integer variable එකක් බවට implicitly cast කරන්න පුළුවන් variables පමණයි. ඒ කියන්නෙ byte, short, int, char කියන variables පමණයි. boolean, long, float, double භාවිත කරන්න බෑ. 
  2. case ‘condition’ : කියල අපි case එකක් හදාගන්නකොට condition කියන තැනට එන්න ඕනෙ අදාළ variable එකේ අගයක් විය හැකි ඉලක්කමක් හෝ අකුරකි.
  3. එකම condition එක තියෙන case එකකට වඩා නොතිබිය යුතුයි. (case 1 : කියල දෙකක් තියෙන්න බෑ)
  4. Condition එක නියත අගයක් විය යුතුයි. Condition එක ලෙස variables පාවිච්චි කරන්න බෑ.
  5. අවශ්‍ය නම් default : case එකක් ඇතුලත් කරන්න පුළුවන්. අදාළ variable එකේ අගය කිසිම case එකක් හා සමාන වෙන්නෙ නැත්තම් default case එකේ තියෙන statements run වෙනව. default case එක switch block එකේ ඕනෑම තැනක ඇතුලත් කරන්න පුළුවන්.
  6. Switch statement එකක කිසියම් case එකක් සමාන වුණාම break; statement එකක් හමුවෙනකන් හෝ block එක අවසාන වෙනකන් ඊට පසුව තියෙන සියලුම cases වල තියෙන statements run වෙනව.

මම මේකටත් අභ්‍යාසයක් දෙන්නම්, බලන්නකො කරන්න පුලුවන්ද කියල.

Exercise  2 :
අපිට කරගන්න අවශ්‍ය වැඩේ තමයි අවුරුද්ද සහ මාසය ඇතුලත් කලාම අදාළ මාසයේ දින ගණන පෙන්වීම. මේ සඳහා තමයි program එකක් ලියන්න ඕනෙ. පහල තියෙනව input / output සඳහා උදාහරණයක්‌,

Input:
Year : 2000
Month : 2
Output:
Number of days : 29

ඉඟිය : අපිට මේ program එක කරන්න if-then else සහ switch block දෙකම පාවිච්චි කරන්න වෙනව.switch block එකේ case එකක් විදිහට satements කිහිපයක් type කරන්න පුළුවන්. ඒ වගේම තමයි if-then-else statement එකක් යොදාගන්නත් පුළුවන්. 

අදට පාඩම මෙතනින් ඉවරයි. තවම අපි ඉවර කලේ selection statements කියන කොටස විතරයි. තවත් කොටස් දෙකක්ම සාකච්චා කරන්න තියෙනව. අද පාඩම ටිකක් දිගයි, ඒ වගේම ගෙදර වඩාත් තියෙන නිසා අදට පාඩම මෙතනින් නවත්වනව. ඊළඟ පාඩමෙන් අපි ඉතිරි කොටස සාකච්චා කරමු. මතකයිනෙ දීපු programs? ඔයාලට පුළුවන් comment එකක් විදිහට බ්ලොග් එකේ හරි facebook group එකේ හරි ඒ programs දාන්න. එතකොට මට පුළුවන් ගැටළු එහෙම තියෙනවනම් කියල දෙන්න. එහෙනම් යාළුවනේ අපි ආපහු ඉක්මනට හමු වෙමු. සුභ දවසක්.

19 comments:

  1. මම දනුල සාහිත මචෝ මම නමි එක Code එකක් ලිව්වා.හැබැයි හෙන දිගයි.මොකද මම තාම java ඉගෙන ගන්න පටන් ගත්තා විතරයි.මේක මම ලිව්වෙ දැනට මම ඉගෙන ගෙන තියෙන දේවල් වලින් මම දන්න විදියට.මම හිතන්නේ මේක කරන්න මීට වඩා ලේසි ක්‍රම ඇති.එහෙම තියෙනවා නම් ඒ ගැනත් කියල post එකක් දාන්න.මම හිතන්නේ code එකනම් ගොඩක් හොද මට්ටමක තියෙනව කියල.මොකද මේකට මම විවිධ විදියට numbers enter කරලා බැලුවා.එම data වලට හොදට වැඩ කරා.ඔන්න source code එක පහල තියෙනවා.අඩුපාඩු එහෙම තියෙනවනම් කියල comment එකක් දාන්න.

    import java.util.Scanner;
    class AA{
    int x;int y;int z;
    boolean a;boolean b;boolean c;
    public static void main(String []args){
    Scanner sc=new Scanner(System.in);
    System.out.println("Enter your result");
    int x=sc.nextInt();
    int y=sc.nextInt();
    int z=sc.nextInt();
    boolean a;boolean b;boolean c;
    if(a=(x>y)&&(x>z)){System.out.println(x);}
    if(a=(y>x)&&(y>z)){System.out.println(y);}
    if(a=(z>x)&&(z>y)){System.out.println(z);}
    AA q=new AA();
    if(a=(x>y)&&(x>z)){q.m1(x,y,z);}
    if(a=(y>x)&&(y>z)){q.m2(x,y,z);}
    if(a=(z>x)&&(z>y)){q.m3(x,y,z);}
    }
    void m1(int x,int y,int z){

    if(b=(y>z)){System.out.println(y);}
    if(b=(z>y)){System.out.println(z);}
    if(c=(yz)){System.out.println(z);}
    }

    void m2(int x,int y,int z){

    if(b=(x>z)){System.out.println(x);}
    if(b=(z>x)){System.out.println(z);}
    if(c=(zy)){System.out.println(x);}
    if(b=(y>x)){System.out.println(y);}
    if(c=(x<z)&&(x<y)){System.out.println(x);}
    }

    }

    ReplyDelete
  2. me mchan imanata oop tika dapanko... mata eka class ekenuth allaganna bari una....

    ReplyDelete
  3. mamath code eka livva String Scanners walata .meke adupadu thiyenava nam hadanna .....
    import java.util.Scanner;
    import java.io.*;
    public class zee{
    public static void main(String args[]){
    // variable declare karanne methana
    Scanner in =new Scanner(System.in);
    String s1;
    String s2="yes";
    String s3="no";
    System.out.println("Are u married?");
    s1=in.next();
    if(s1.equals(s2)){
    System.out.println("okkayy");
    }
    else if(s1.equals(s3)){
    System.out.println("Double ok");
    }
    else{
    System.out.println("Bye Bye");
    }
    }

    ReplyDelete
  4. software coz එකක් කරන්න හොද ආයතන ටිකක් කියන්න පුළුවන්ද?

    ReplyDelete
  5. අපරාදේ බ්ලොග් එක නැවතිලා :(

    ReplyDelete
  6. ayeth blog eka patan ganna ...puduma vatinava me blog eka.thanks

    ReplyDelete
  7. aparade me blog eka nathila thiyenne. aith patan gannako???
    aluthin patan ganna ayata meka sahenna watinawa

    ReplyDelete
  8. මෙ බ්ලොග් එක ඉතාමත් වටිනවා. මෙක නවත්තපු එක අපිට පඩුයි. ඔබට ජය වෙවා..

    ReplyDelete
  9. අනේ මේ blog එක ආපසු පටන් ගන්නේ නැද්ද අපරාදේ ....

    ReplyDelete
  10. Interesting blog
    import java.util.Scanner;
    class Circle {
    public static void main(String
    [] args){
    Scanner sc=new Scanner(System.in);
    int w=sc.nextInt();
    int x=sc.nextInt();
    int y=sc.nextInt();
    boolean s=(w>x)&&(x>y);
    boolean t=(x>y)&&(y>w);
    boolean u=(y>w)&&(w>x);
    boolean h=(y>x)&&(x>w);
    boolean g=(x>w)&&(w>y);
    boolean k=(w>y)&&(y>x);

    if (g==true){
    System.out.println(x);
    System.out.println(w);
    System.out.println(y);
    }

    if (k==true){
    System.out.println(w);
    System.out.println(y);
    System.out.println(x);
    }

    if(s==true){
    System.out.println(w);
    System.out.println(x);
    System.out.println(y);
    }
    if(t==true){
    System.out.println(x);
    System.out.println(y);
    System.out.println(w);
    }
    if(u==true){
    System.out.println(y);
    System.out.println(w);
    System.out.println(x);
    }
    if(h==true){
    System.out.println(y);
    System.out.println(x);
    System.out.println(w);
    }
    }
    }

    ReplyDelete
  11. Good job.all lessons are very clear.

    ReplyDelete
  12. This comment has been removed by the author.

    ReplyDelete
  13. Menna mage source code eka.

    import java.util.Scanner;
    public class Dilan {
    public static void main(String args[]){
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter your 3 Numbers : ");
    int a = sc.nextInt();
    int b = sc.nextInt();
    int c = sc.nextInt();

    if((a>b)&&(a>c)){
    System.out.println(a);
    }else if((b>a)&&(b>c)){
    System.out.println(b);
    }else{
    System.out.println(c);
    }

    if(((a>b)&&(ac)&&(aa)&&(bc)&&(b<a))){
    System.out.println(b);
    }else{
    System.out.println(c);
    }

    if((a<b)&&(a<c)){
    System.out.println(a);
    }else if((b<a)&&(b<c)){
    System.out.println(b);
    }else{
    System.out.println(c);
    }

    }
    }

    ReplyDelete
    Replies
    1. This comment has been removed by the author.

      Delete
    2. Sorry! me code eke deweni if-then-else statement eka type wenne ne.

      "if((a>b)&&(ac)&&(a<b)){
      System.out.println(a); "

      Delete