0

آموزش برنامه نویسی جاوا

 
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

آموزش برنامه نویسی جاوا - قسمت ۱۸:دستورهای switch در پروژه ماه تولد‎
شنبه 28 دی 1392  2:58 PM

پس از آشنایی با دستورات شرطی if حال نوبت به آشنایی با مبحث switch در زبان برنامه نویسی جاوا می رسد. در حقیقت switch بیانگر شرط در برنامه نویسی جاوا اما به شکل دیگری است. به عبارت دیگر استفاده از دستورات if و else برای زمان هایی مناسب تر است که ما دو احتمال بیشتر نداشته باشیم. به طول مثال یا سن شما بالای 30 است و یا زیر 30 است. حال اگر بخواهیم تعداد احتمالات را افزایش دهیم می بایست از دستور switch استفاده کنیم اما فراموش نکنیم که با استفاده از دستورات if و else نیز می توانیم احتمالات بیش از دو مورد را مورد سنجش قرار دهیم اما این در حالی است که باید کد بیشتری بنویسیم. برای روشن شدن کاربرد دستور switch سناریویی به شکل زیر تعریف می کنیم که در ادامه مطلب آمده است...

فرض کنیم می خواهیم برنامه ای بنویسیم که در ابتدای برنامه از کاربر می خواهیم که عدد مربوط به ماهی که در آن متولد شده است را وارد کند. پس از آنکه کاربر این کار را انجام داد، برنامه ای که ما طراحی کرده ایم نام ماه انتخابی را برای کاربر به نمایش در خواهد آورد. (ممکن است برخی از برنامه نویسان مبتدی این سوال برایشان پیش آید که فایده نوشتن چنین برنامه ای چیست. در پاسخ به سوال فوق بایستی گفت که در موارد بسیاری به خصوص در ثبت نام های اینترنتی مثل ثبت نام آنلاین دانشگاه پیش می آید که از شما خواسته می شود تا یکسری فرم را پر نمایید. بخشی از این فرم مربوط به تاریخ تولد شما است که شما صرفاً اجازه دارید تا یکی از 12 ماه سال را انتخاب کنید ویا از شما خواسته می شود تا کد مربوط به شهر محل تولد خود را انتخاب نمایید. پس از پر کردن کلیه فضاهای خالی فرم، از شما خواسته می شود تا دکمه تایید را فشار دهید. پس از این کار صفحه ای برای شما نمایش داده می شود که کلیه اطلاعات وارده توسط شما را پیش روی شما قرار می دهد تا در صورت تایید شما و فشردن دکمه تایید نهایی اطلاعات به سرور فرستاده شوند. حال در این صفحه دوم دیده می شود که در بخش تاریخ تولد به جای به طور مثال نوشتن شماره ماه (مثلاً شماره 12 )، نام ماه که اسفند می باشد نمایش داده می شود و یا به جای نشان دادن کد شهری که در آن متولد شده اید نام آن شهر (مثلاً اراک) را برای شما نمایش می دهد. امید است با این توضیح فایده فراگیری چنین دستوری به خوبی مشخص شده باشد.)

اکنون پروژه جدیدی با نام 18th Session به معنی "جلسه هجدهم" در محیط برنامه نویسی اکلیپس ایجاد کرده، کلاسی در آن تحت عنوان MySwitchClass یا هر نام دیگری می سازیم(به خاطر داشته باشیم که حرف اول نام کلاس می بایست با حرف بزرگ نوشته شود و اجازه نداریم تا از کاما و یا خط تیره و دیگر علائم در نام کلاس خود استفاده کنیم. البته استفاده از _ یا اصطلاحاً Underscore بلامانع است). به خاطر داشته باشیم که در حین ساخت کلاس، گزینه public static void main را تیک بزنیم. پس از باز کردن فایل کلاسی که ایجاد کرده ایم، کلیه Comment ها را حذف کرده و کدی مشابه کد زیر خواهیم داشت:


  1. public class MySwitchClass {
  2.  
  3. public static void main(String[] args) {
  4.  
  5. }
  6. }

در این مرحله از کدنویسی، کلاسی تحت عنوان Scanner را وارد برنامه خود می کنیم. در واقع این کلاس امکان استفاده از کیبورد پی سی و یا لپ تاپ را به ما داده و اطلاعات ورودی از کیبورد را به برنامه ما ارسال می کند(جهت آشنایی بیشتر با این کلاس، می توانید به آموزش های قسمت یازدهم، دوازدهم و سیزدهم رجوع نمایید). کد تکمیل شده در این مرحله از کار به شکل زیر خواهد بود:

  1. import java.util.Scanner;
  2.  
  3. public class MySwitchClass {
  4.  
  5. public static void main(String[] args) {
  6. Scanner keyboardInput = new Scanner(System.in);
  7. }
  8. }

در این کد ما یک Instance یا به عبارتی یک "شیئ" از کلاس Scanner را خواهیم ساخت. برای همین منظور، کلید واژه Scanner را نوشته و نامی برای آن انتخاب می کنیم. در اینجا نام keyboardInput به معنی "ورودی کیبورد" را انتخاب شده است. توجه داشته باشید که نحوه نوشتن این نام به صورت camelCase می باشد(برای آشنایی بیشتر با نحوه نام گذاری اسامی متغیرها و کلاس ها، به آموزش قسمت دهم رجوع نمایید). پس از علامت = کلید واژه new را نوشته(توجه داشته باشید که حرف اول این واژه بایستی به صورت کوچک باشد) و مجدداً واژه Scanner را می نویسیم. در حقیقت با این کار ما یک Object یا شیئ جدید از جنس کلاس Scanner که از قبل در API زبان برنامه نویسی جاوا طراحی شده است ایجاد می کنیم. داخل پرانتزی که مقابل واژه Scanner قرار دارد می نویسیم System.in که به این معنی است که ورودی سیستم که همان کیبورد است را هدف قرار دهد(توجه داشته باشید که واژه سیستم به حرف بزرگ نوشته شده است). در این مرحله خواهید دید که محیط برنامه نویسی اکلیپس دور هر دو واژه Scanner نقطه چین قرار می دهد که به معنی وجود مشکلی در برنامه می باشد. با قرار دادن نشانگر موس روی یکی از نقطه چین ها صفحه ای باز خواهد شد که داری یکسری پیشنهاد برای رفع این مشکل است. این صفحه به شکل زیر خواهد بود:

920327-18-IMAGE 1.jpg

اولین پیشنهادی که اکلیپس به ما می دهد Import ‘Scanner’ (java.util) می باشد که دقیقا مد نظر ما هم همین پیشنهاد است. پس از انتخاب این گزینه با کلیک کردن بر روی آن، مشاهده می کنیم که import java.util.Scanner; در بالای کد ما ظاهر می شود. حال کاری که این خط از کد انجام می دهد این است که کلاس Scanner که قبلاً در API زبان برنامه نویسی جاوا ایجاد شده است را در کد ما فرا می خواند و از این پس ما خواهیم توانست در هر جای کد خود از این کلاس به سهولت استفاده کنیم. لازم به ذکر است که پس از استفاده مکرر از این کلاس، خواهیم دید که این خط از کد ملکه ذهن ما شده و خودمان هم به صورت دستی بدون نیاز به استفاده از گزینه Import می توانیم آن را در بخش فوقانی کد نوشته و مشکل را رفع کنیم(به عنوان راه کار دیگر، می توان برای Import کردن این کلاس در برنامه خود، پس از نوشتن آن به طور هم زمان کلیدهای Ctrl+Shift+O را فشار دهیم). پس از این کار نیاز داریم تا جمله ای را روی صفحه مانیتور به نمایش در آوریم مبنی بر اینکه عدد ماه تولد خود را درج نمایید. برای همین منظور کد خود را به شکل زیر تکمیل می کنیم:

  1. import java.util.Scanner;
  2.  
  3. public class MySwitchClass {
  4.  
  5. public static void main(String[] args) {
  6. Scanner keyboardInput = new Scanner(System.in);
  7. System.out.print("Please enter the number of your birth month: ");
  8. }
  9. }

جمله داخل پرانتز به معنی "لطفاً عدد ماه تولد خود را وارد نمایید:" می باشد. در این مرحله از کار ما می توانیم پروژه خود را اجرا کنیم اما تنها خروجی برنامه نشان دادن همین جمله است که در بالا توضیح داده شد. حال یک متغیر از جنس int تحت عنوان monthNumber به معنی "شماره ماه" ایجاد می کنیم. هر متغیر نیاز به یک Value یا مقدار می باشد که در این جا به طور مثال با قرار دادن یک علامت = و عددی همچون 12 می توان این مقدار را برای متغیر خود تعریف کرد. اما کاری که در اینجا می خواهیم انجام دهیم این است که مقدار متغیر خود را به صورت دینامیک وارد برنامه خود کنیم و به همین خاطر است که از کلاس Scanner استفاده می کنیم. برای این منظور کد خود را به شکل زیر تکمیل می کنیم:

  1. import java.util.Scanner;
  2.  
  3. public class MySwitchClass {
  4.  
  5. public static void main(String[] args) {
  6. Scanner keyboardInput = new Scanner(System.in);
  7. System.out.print("Please enter the number of your birth month: ");
  8. int monthNumber = keyboardInput.nextInt();
  9. }
  10. }

در اینجا به جای آنکه پس از علامت = یک عدد وارد نماییم، شئیی از کلاس Scanner تحت عنوان keyboardInput که در مرحله پیش ایجاد کردیم را فرا می خوانیم. سپس یک نقطه به دنبال آن قرار داده و بلافاصله پنجره ای به شکل زیر نمایان می شود و اگر این اتفاق نیفتاد می توان دکمه های کنترل و Space را به طور هم زمان می فشاریم:

920327-18-IMAGE 2.jpg

در این پنجره برای تکمیل کد تعدادی پیشنهاد مشاهده می شود که از میان آن ها متد nextInt() مورد نیاز ما است چرا که متغیر ما از جنس int است. لازم به ذکر است که اگر زمانی نیاز داشتیم تا اعداد اعشاری را از طریق کیبورد وارد برنامه خود کنیم، پس از انتخاب متغیری از جنس double می بایست در این مرحله گزینه nextDouble() را انتخاب کنیم. (برای آشنایی بیشتر با متدهای کلاس Scanner به آموزش قسمت دوازدهم رجوع نمایید). پس از کلیک کردن بر روی گزینه nextInt() یک علامت ; در انتهای Statement خود قرار می دهیم تا آن را به پایان برسانیم. در این مرحله از آموزش، مطلب جدید که همان استفاده از switch است را توضیح خواهیم داد. در واقع ساختار switch همانند ساختار if است به عبارت دیگر به صورت switch(){} نوشته می شود که داخل پرانتز می بایست پارامتر ورودی که در اینجا همان شماره ماه است وارد شود و داخل دو علامت {} می بایست دستورات شرطی قرار گیرند. برای ادامه کار، نام متغیر خود که همان monthNumber است را داخل پرانتز می نویسیم و کد خود را به شکل زیر تکمیل می کنیم:

  1. import java.util.Scanner;
  2.  
  3. public class MySwitchClass {
  4.  
  5. public static void main(String[] args) {
  6. Scanner keyboardInput = new Scanner(System.in);
  7. System.out.print("Please enter the number of your birth month: ");
  8. int monthNumber = keyboardInput.nextInt();
  9. switch(monthNumber){
  10.  
  11. }
  12. }
  13. }

حال مابین دو علامت {} قرار گرفته مقابل switch می بایست case ها و یا "مواردی" را تعریف کنیم که بر اساس آن، نام ماه انتخابی در مرحله قبل مشخص شده و سپس روی صفحه مانیتور نمایش داده شود. برای همین منظور کد خود را به شکل زیر تکمیل می کنیم:

  1. import java.util.Scanner;
  2.  
  3. public class MySwitchClass {
  4. public static void main(String[] args) {
  5. Scanner keyboardInput = new Scanner(System.in);
  6. System.out.print("Please enter the number of your birth month: ");
  7. int monthNumber = keyboardInput.nextInt();
  8. switch (monthNumber) {
  9. case 1 :
  10. System.out.println("You were born in Farvardin.");
  11. break;
  12. }
  13. }
  14. }

در واقع با تکمیل کد خود به این شکل به کامپیوتر دستور می دهیم که اگر Value ورودی از طریق کیبورد به متغیری از جنس int تحت عنوان monthNumber معادل با 1 بود، جمله You were born in Farvardin. به معنی "شما در ماه فروردین متولد شدید." نمایش داده شود. در این مرحله دستور break; را توضیح نخواهیم داد چرا که در آموزش بعد به اهمیت آن بیشتر پی خواهیم برد(به خاطر داشته باشیم که پس از کلید واژه case می بایست علامت : قرار داد و پس از کلید واژه break علامت ; قرار داد). حال با copy و paste کردن بخش جدید کد به تعداد یازده بار دیگر، دستورات شرطی را برای کلیه ماه های سال ایجاد می کنیم و آن ها را برای یازده ماه دیگر ویرایش می کنیم و در نهایت کد ما به شکل زیر در خواهد آمد:

  1. import java.util.Scanner;
  2.  
  3. public class MySwitchClass {
  4. public static void main(String[] args) {
  5. Scanner keyboardInput = new Scanner(System.in);
  6. System.out.print("Please enter the number of your birth month: ");
  7. int monthNumber = keyboardInput.nextInt();
  8. switch (monthNumber) {
  9. case 1 :
  10. System.out.println("You were born in Farvardin.");
  11. break;
  12. case 2 :
  13. System.out.println("You were born in Ordibehesht.");
  14. break;
  15. case 3 :
  16. System.out.println("You were born in Khordad.");
  17. break;
  18. case 4 :
  19. System.out.println("You were born in Tir.");
  20. break;
  21. case 5 :
  22. System.out.println("You were born in Mordad.");
  23. break;
  24. case 6 :
  25. System.out.println("You were born in Shahrivar.");
  26. break;
  27. case 7 :
  28. System.out.println("You were born in Mehr.");
  29. break;
  30. case 8 :
  31. System.out.println("You were born in Aban.");
  32. break;
  33. case 9 :
  34. System.out.println("You were born in Azar.");
  35. break;
  36. case 10 :
  37. System.out.println("You were born in Day.");
  38. break;
  39. case 11 :
  40. System.out.println("You were born in Bahman.");
  41. break;
  42. case 12 :
  43. System.out.println("You were born in Esfand.");
  44. break;
  45. }
  46. }
  47. }
  48.  

حال می توانیم برنامه خود که تا نود درصد تکمیل شده است را اجرا کنیم. پس از زدن دکمه Run نرم افزار اکلیپس پنجره ای به شکل زیر ظاهر می شود:

920327-18-IMAGE 3.jpg

حال با کلیک کردن داخل Console یک عدد از 1 تا 12 را وارد می کنیم. به طور مثال عدد 1 را وارد می کنیم سپس دکمه Enter را می زنیم. پس از اجرای برنامه نتیجه ای مشابه تصویر زیر خواهیم دید:

920327-18-IMAGE 4.jpg

چنانچه برنامه را مجدد اجرا کرده و عددی دیگری همچون 7 را وارد برنامه کنیم، برنامه case مرتبط با آن را فرا خواهد خواند. حال اگر کاربر عددی به غیر از اعداد 1 تا 12 را وارد کند چه اتفاقی خواهد افتاد:

920327-18-IMAGE 5.jpg

همانطور که در تصویر فوق مشاهده می شود با وارد کردن عدد 13 که جزو case ها برنامه ما نیست، برنامه هیچ چیزی نمایش نخواهد داد چرا دستوری برای چنین شرایطی تعریف نکرده ایم. در قسمت نوزدهم پیرامون دستور break توضیحاتی خواهیم داد و علاوه بر آن خواهیم دید که دستور default چگونه بر مشکلی که در تصویر فوق پیش آمده فائق خواهد شد.

تشکرات از این پست
دسترسی سریع به انجمن ها