0

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

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

آموزش برنامه نویسی جاوا - قسمت ۲۰: به کار گیری متغیر char در قالب پروژه خرید آنلاین
شنبه 28 دی 1392  3:01 PM

در آموزش های هجدهم و نوزدهم با نحوه به کاری گیری دستور switch آشنا شدیم. حال در این آموزش قصد داریم تا با به کاری گیری متغیر char در فرمان switch آشنا شویم. در واقع همانطور که در آموزش های پیشین عددی را وارد برنامه کردیم و بر اساس آن عدد جمله ای را در بخش Console به نمایش در آوردیم، در این آموزش قصد داریم تا با وارد کردن یک حرف یا کاراکتر این دستور را به برنامه خود بدهیم تا جمله خاصی را نمایش دهد. در آموزش های پیشین ذکر شد که یکی از انواع متغیرها از نوع Primitive Type متغیر char می باشد که برای نگهداری مقادیری همانند کاراکترها، علائم و غیره مورد استفاده قرار می گیرد. برای شروع کار پروژه ای تحت عنوان 20th Session به معنی "جلسه بیستم" ایجاد کرده و کلاسی به نام MySwitchClass می سازیم و به این شکل کار خود را آغاز می کنیم:


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

توجه داشته باشیم که مقدار اختصاص داده شده به متغیر char بر خلاف کلاس String که مابین دو علامت " " قرار می گیرد، می بایست مابین دو علامت ‘ ‘ قرار گیرد. از سوی دیگر به جای مقدار این متغیر می توانیم از حروفی مثل G, b, z و یا علائمی همچون @, $ وغیره نیز استفاده کنیم(به خاطر داشته باشیم که به جای تعریف کردن Value متغیر char در خود برنامه، می توانیم از کلاس Scanner که در آموزش های پیشین به طور مفصل مورد بررسی قرار گرفت نیز استفاده کنیم تا از آن طریق بتوانیم به طور دینامیک مقدار متغیر را وارد برنامه کنیم اما در این آموزش به منظور جلوگیری از طولانی شدن بحث از توضیح پیرامون جزئیات این کلاس خودداری خواهد شد و به علاقمندان به کسب اطلاعات بیشتر پیرامون کلاس Scanner پیشنهاد می شود به آموزش های یازدهم، دوازدهم و سیزدهم مراجعه نمایند). حال ببینیم که به کارگیری ترکیب دستوراتی همچون switch به همراه متغیری از جنس char چه کاربردی دارد. شاید بارها و بارها برای خیلی از ما پیش آمده باشد که خواسته باشیم به صورت آنلاین چیزی همچون یک نرم افزار خریداری نماییم. در واقع جایی در فرمی که می بایست اطلاعات خود را تکمیل کنیم به منظور انتخاب نحوه ارسال کالا در نظر گرفته شده است که از شما می خواهد نحوه پست بسته سفارشی و همچنین نحوه پرداخت را مشخص کنید. به طور مثال می توان سه گزینه را در نظر گرفت که عبارتند از گزینه A و گزینه B و گزینه C. در حقیقت در توضیحات خرید آنلاین آمده است که اگر شما گزینه A را انتخاب کنید بدان معنا است که "بسته پستی شما از طریق پست پیشتاز برای شما ارسال خواهد شد و مبلغ هم پس از تحویل کالا توسط پستچی دریافت خواهد شد". گزینه B بدان معنا است که "بسته پستی شما از طریق پست عادی ارسال خواهد شد و مبلغ هم پس از تحویل کالا توسط پستچی دریافت خواهد شد". در نهایت در توضیحات گزینه C آمده است که ما "می توانیم به صورت آنلاین هزینه را پرداخت کرده و با دریافت لینک، نرم افزار مد نظر را دانلود نماییم". در اینجا است که می توانیم اهمیت این آموزش را به طور عملی مشاهده کنیم. برای روشن شدن مطلب، سناریوی فوق را به یک برنامه کاملاً عملی تبدیل خواهیم کرد. برای این منظور کد خود را به شکل زیر تکمیل می کنیم:

  1. import java.util.Scanner;
  2.  
  3. public class MySwitchClass {
  4. public static void main(String args[]) {
  5. System.out.print("Please choose which type of mail would you like? ");
  6. Scanner typeSelection = new Scanner(System.in);
  7. char typeChosen = typeSelection.next().charAt(0);
  8. char toUpperCase = Character.toUpperCase(typeChosen);
  9. switch (toUpperCase) {
  10. case 'A' :
  11. System.out.println("You will get your package via express mail \nand you have to pay to the postman.");
  12. break;
  13. case 'B' :
  14. System.out.println("You will get your package via ordinary mail \nand you have to pay to the postman.");
  15. break;
  16. case 'C' :
  17. System.out.println("You have to pay via Internet bank and \ndownload your software via Internet");
  18. break;
  19. default :
  20. System.out.println("Sorry, It seems that there is a problem,\nplease give it another try!");
  21. break;
  22.  
  23. }
  24.  
  25. }
  26. }

اولین دستوری که در کد بالا به کامپیوتر می دهیم این است که جمله Please choose which type of main would you like? به معنی "لطفا مشخص کنید چه نوع پستی را تمایل دارید استفاده کنید؟" را روی صفحه مانیتور نمایش دهد. سپس یک Instance یا "نمونه ای" از کلاس Scanner تحت عنوان typeSelection به معنی "انتخاب نوع ارسال" ایجاد می کنیم. حال برای اینکه بتوانیم از طریق کیبورد سه حرف A, B, C را دریافت کنیم نیاز داریم تا متغیری از جنس char ایجاد کنیم. نام متغیر char را typeChosen به معنی "نوع انتخاب شده" می گذاریم و به جای آنکه مقداری برای آن تعریف کنیم، دستور می دهیم تا هرآنچه کلاس Scanner از طریق کیبورد دریافت می دارد به متغیر ما به عنوان مقدار اختصاص یابد. برای این منظور پس از علامت = که مقابل نام متغیر char قرار دارد، نام شیئی از کلاس Scanner که قبلا ایجاد کرده بودیم را می نویسیم. حال مقابل نام کلاس Scanner می بایست از دو متد دیگر استفاده کنیم. متد اول next() نام دارد که این دستور را به برنامه می دهد تا ورودی از هر جنس را از کیبورد را دریافت کند(برای آشنایی بیشتر با انواع متدهای کلاس Scanner به آموزش دوازدهم مراجعه نمایید). حال نوبت به نوشتن متد دوم می رسد که charAt() می باشد. در واقع کاری که این متد انجام می دهد این است که کاراکتری را در موقعیت مشخصی را دریافت کند. مثلاً اگر ورودی از کیبورد کاراکترهای ABCD باشد و متد charAt(2) فرا خوانده شود نرم افزار کاراکتر C را از میان دیگر کاراکترها برمی گزیند(لازم به ذکر است که در کاراکترها اولین جایگاه به عدد "صفر" تعلق دارد از همین رو است که وقتی عدد 2 را فرا می خوانیم به جای آنکه کاراکتر B دریافت شود، کاراکتر C دریافت می شود زیرا که جایگاه حرف اول که A می باشد صفر بوده، جایگاه حرف دوم که B می باشد یک بوده، جایگاه حرف سوم که C می باشد دو می باشد و الی آخر). در این برنامه که ما طراحی می کنیم می بایست متد charAt(0) فرا خوانده شود چرا که ما نیاز داریم تا کاربر یک کاراکتر را وارد سازد و بالتبع اولین کاراکتری که کاربر وارد می سازد را کامپیوتر مد نظر قرار دهد و جایگاهش صفر است. حال نکته ای که در اینجا می بایست مد نظر قرار داد این است که چنانچه کاربر کاراکتر مد نظر خود را با حرف بزرگ و یا کوچک بنویسد، برنامه حروف کوچک و بزرگ را به معانی مختلفی برای خود تفسیر می کند. به عبارت دیگر معنای کاراکتر A با معنا کاراکتر a فرق خواهد کرد و این در حالی است که برخی از کاربران ممکن است نوع سفارش خود را با حرف مثلاً B مشخص کنند و برخی دیگر با حرف b که در این صورت برنامه ما با مشکل مواجه خواهد شد(قبلا بارها و بارها توضیح داده ایم که زبان برنامه نویسی جاوا Case Sensitive است یعنی به حروف بزرگ و کوچک حساس می باشد). برای رفع این مشکل یک متغیر دیگر از جنس char تعریف کرده و نام آن را toUpperCase به معنی "تبدیل به حروف بزرگ" می گذاریم. در واقع با اینکار هر کاراکتری که کاربران وارد کنند چه حرف بزرگ باشد و چه حرف کوچک به حروف بزرگ تبدیل خواهند شد. حال برای تعیین مقدار این متغیر جدید از متد دیگری تحت عنوان Character.toUpperCase() استفاده می کنیم. کاری که این متد انجام می دهد این است که هر پارامتری را که برای این متد داخل پرانتز قرار دهیم را به حرف بزرگ تبدیل می کند. برای ادامه نام متغیر اول خود که typeChosen بود را داخل پرانتز نوشته و متد ما به شکل Character.toUpperCase(typeChosen) در خواهد آمد(لازم به ذکر است متدی که کلیه کاراکتر ها را به حروف کوچک تبدیل می کند نیز Character.toLowerCase() می باشد). به طور خلاصه متغیر اول ما مقدار خود را از طریق کیبورد و با استفاده از کلاس Scanner دریافت می دارد سپس مقدار دریافتی خود را به متغیر دوم منتقل می کند که وظیفه آن تبدیل کاراکتر ها به حروف بزرگ می باشد. از این پس متغیر مورد استفاده ما در ادامه این برنامه متغیر دوم خواهد بود. حال یک switch تعریف کرده و پارامتر ورودی آن را متغیر دومی که ایجاد کردیم یا همان toUpperCase قرار می دهیم. از اینجای کار به بعد همانند آموزش پیشین خواهد بود یعنی به هر تعداد که بخواهیم شرط از نوع case ایجاد می کنیم و مقدار آن را داخل دو علامت ‘ ‘ قرار می دهیم سپس بعد از آن یک علامت : قرار می دهیم و در نهایت دستوری که می خواهیم در صورت true بودن شرط اجرا شود را نوشته و در نهایت دستور break; را اجرا می کنیم. به طور خلاصه کد به شکل زیر خواهد بود:

  1. case 'A':
  2. System.out.println("Some action");
  3. break;
  4.  

در واقع از آنجا که در سناریو این آموزش ما 3 حالت بیشتر نداریم، سه شرط تحت عناوین case 'A' : و case 'B' : و case 'C' : ایجاد می کنیم. حال به برنامه خود دستور می دهیم که اگر شرط A صحیح بود جمله You will get your package via express mail \nand you have to pay to the postman. به معنی "شما بسته پستی خود را از طریق پست پیشتاز دریافت خواهید کرد و می بایست هزینه را به پستجی تحویل دهید". نمایش داده شود. اگر شرط B صحیح بود جمله You will get your package via ordinary mail \nand you have to pay to the postman. به معنی "شما بسته پستی خود را از طریق پست معمولی دریافت خواهید کرد و می بایست هزینه را به پستچی تحویل دهید". نمایش داده خواهد شد. در نهایت کاربر اگر گزینه C را انتخاب نماید جمله You have to pay via Internet bank and \ndownload your software via Internet به معنی "شما می بایست از طریق اینترنت بانک پرداخت خود را انجام دهید و نرم افزار خود را نیز از طریق اینترنت دانلود نمایید". نمایش داده خواهد شد. همانطور که در جلسه آموزش پیشین توضیح داده شود، زمان هایی وجود دارد که کاربر گزینه ای نادرست وارد می کند مثلا به جای کاراکتر های تعریف شده A, B, C کاراکتر F را وارد می سازد و یا این بخش را کلاً خالی می گذارد که در این حالت می بایست دستور default را نیز مورد استفاده قرار داد تا در چنین مواقعی به کاربر اخطاری که تمایل داریم را منعکس کنیم برای همین منظور در بخش default جمله Sorry, It seems that there is a problem,\nplease give it another try! به معنی "ببخشید، به نظر می رسد که مشکلی رخ داده است، لطفاً مجدداً سعی نمایید!" به نمایش در آید. حال پس از اجرای برنامه تصویر زیر مشاهده خواهد شد:

920327-20-IMAGE 1.jpg

حال با کلیک کردن در بخش Console و وارد کردن یکی از سه گزینه A, B, C برنامه دستور مناسب را اجرا خواهد کرد. به طور نمونه در این جا کاراکتر C را وارد می کنیم و نتیجه زیر مشاهده خواهد شد:

920327-20-IMAGE 2.jpg

اگر به تصویر فوق با دقت نگاه کنید، مشاهده خواهید کرد که کاراکتر c به صورت کوچک نوشته شده است و این در حالی است که در شرط case 'C' به برنامه خود دستور داده ایم که اگر کاراکتر ورودی حرف C بزرگ بود دستور مرتبط را اجرا کند. در اینجا است که به اهمیت متغیر دوم char که تعریف کردیم پی می بریم چرا که وظیفه این متغیر است که کلیه کاراکتر ها را به حروف بزرگ تبدیل کند تا در این مرحله از برنامه ما به هیچ مشکلی بر نخوریم. حال ببینیم اگر کاراکتر تعریف نشده ای را وارد برنامه کنیم چه خروجی دریافت خواهیم کرد:

920327-20-IMAGE 3.jpg

در واقع برنامه ما در این موقع به این شکل عمل می کند که اول سراغ شرط A می رود و می بیند که این شرط false است، سپس سراغ شرط B می رود و می بیند که باز هم نتیجه false است و در آخر به سراغ شرط C می رود که باز هم نتیجه false است. در این مرحله ما از قبل به برنامه خود دستور داده ایم که اگر هیچ کدام از شروط برآورده نشد به سراغ شرط default برود و آن را اجرا کند. به عنوان آخرین نکته به این مطلب اشاره می کنیم که در کد خود در جملاتی که به عنوان خروجی شروط تعریف کردیم از عبارت \n استفاده کردیم که همانطور که در جلسات پیشین توضیح داده شد وظیفه این عبارت آن است که از جایی که قرار می گیرد به بعد را به خط بعد منتقل می کند و علت استفاده از این دستور صرفاً سهولت در مشاهده کل متن می باشد. در آموزش بعدی پیرامون ارتباط String با دستور switch بحث خواهیم کرد.

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