0

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

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

آموزش برنامه نویسی جاوا قسمت ۱۷: متدهای boolean در پروژه چک کردن رمز ورود کاربر

همانطور که در جلسات گذشته دیدیم، چنانچه داده ورودی به برنامه با متدی که در کلاس Scanner به کار گرفته شده بود هم خوانی نداشت برنامه با خطا مواجه می شد و این در حالی است که ما این اجازه را نداریم تا برنامه ای طراحی کنیم که اگر کاربر چیزی به اشتباه وارد برنامه کرد برنامه در وسط اجرا برنامه Crash کند یا از ادامه کار باز ایستد.

برای این منظور نیاز داریم تا از متدهایی در کلاس Scanner استفاده کنیم که از نوع boolean باشند که چنانچه کاربر یک داده اشتباه وارد کرد به او بازخورد دهد. بنابراین یک پروژه جدید تحت عنوان 17th Session به معنی "جلسه هفدهم" ایجاد کرده و کلاسی به اسم Project به معنی "پروژه" در آن ایجاد می کنیم.

اکنون نیاز است تا یک سناریو تعریف کنیم تا بر آن اساس پروژه خود را تکمیل کنیم. ادامه مطلب را از دست ندهید.

فرض کنیم می خواهیم یک برنامه تحت وب طراحی کنیم که کاربران به منظور استفاده از این برنامه می بایست در ابتدا رمز خود را وارد کنند. کاری که ما قرار است در این برنامه انجام دهیم این است که شرطی بگذاریم که اگر کاربر هر داده ای به غیر عدد صحیح وارد کرد برنامه از وی ایراد بگیرد چرا که رمزهای این برنامه فقط بر اساس یک عدد صحیح چند رقمی طراحی شده اند در ضمن اگر کاربر رمز خود را به اشتباه وارد کرد، برنامه از وی بخواهد که مجدداً اطلاعات خود را وارد کند.

در ابتدا یک شیئ از روی کلاس Scanner تحت عنوان passwordInput به معنی "ورودی رمز عبور" می سازیم. سپس می خواهیم جمله ای به این مضمون روی صفحه مانیتور نمایش دهیم که "لطفا رمز عبور خود را وارد کنید". برای این منظور کد خود را به شکل زیر تکمیل می کنیم:


  1. import java.util.Scanner;
  2.  
  3. class Project {
  4. public static void main(String[] args) {
  5. Scanner passwordInput = new Scanner(System.in);
  6. System.out.print("Please enter your password: ");
  7. }
  8. }

اکنون پس از آنکه کاربر رمز عبور خود را وارد برنامه کرد، نیاز است تا اولاً چک کنیم ببینیم که آیا داده ورودی از جنس یک عدد صحیح است یا خیر ثانیاً چک کنیم ببینیم که آیا رمز عبور درست وارد شده است یا خیر. متدی که در اینجا مورد استفاده قرار خواهد گرفت متدی از جنس boolean است. به عبارت دیگر متدهایی که از این جنس هستند صرفاً دو خروجی خواهند داشت به این صورت که اگر شرطی که این متد گذاشته برآورده شود جواب true خواهد داشت و در غیر این صورت جواب false خواهیم گرفت. متدهای boolean که در ارتباط با کلاس Scanner مورد استفاده قرار می گیرند و از اهمیت بیشتری برخوردارند عبارتند از hasNextLine() برای بررسی این مسئله که ببینیم آیا داده ای از جنس یک string یا "متن" وارد شده است یا خیر، hasNextDouble() برای بررسی این مسئله که ببینیم آیا داده ای از جنس یک عدد اعشاری وارد شده است یا خیر و در نهایت hasNextInt() برای بررسی این مسئله که ببینیم آیا داده ای از جنس یک عدد صحیح وارد شده است یا خیر که در برنامه خود در این پروژه از متد آخر استفاده خواهیم کرد چرا که در سناریوی این پروژه تعریف کرده ایم که رمز برنامه می بایست از داده ای از جنس عدد صحیح باشد. بنابراین می بایست کد خود را به شکل زیر تکمیل کنیم:

  1. import java.util.Scanner;
  2.  
  3. class Project {
  4. public static void main(String[] args) {
  5. Scanner passwordInput = new Scanner(System.in);
  6. System.out.print("Please enter your password: ");
  7. if (passwordInput.hasNextInt()) {
  8. System.out.println("Thanks, you entered the right format");
  9. } else {
  10. System.out.println("Sorry, please enter the right format");
  11. }
  12. }
  13. }

شرط اول برنامه این است که چک کنیم ببینیم که آیا کاربر داده ای از جنس عدد صحیح به عنوان رمز وارد کرده است یا خیر. برای این منظور همانطور که در کد فوق مشاهده می شود یک شرط if وارد برنامه کرد و داخل پرانتز نام شیئ ساخته شده از روی کلاس Scanner را نوشته سپس متد hasNextInt() را به آن ضمیمه می کنیم. به طور خلاصه این شرط حاکی از آن است که برنامه ببیند آیا داده ورودی از طریق کیبورد از جنس یک عدد صحیح است یا خیر و این در حالی است که هیچ فرقی نمی کند این عدد صحیح چه مقداری داشته باشد چرا که در شرط دوم خود این مسئله را خواهیم سنجید. از آنجا که می خواهیم اگر این شرط true بود عبارت Thanks, you entered the right format به معنی "با تشکر، شما فرمت صحیح را وارد کردید" روی صفحه مانیتور به نمایش درآید، پس جمله خود را در دستور System.out.println(); در داخل { } مقابل if می نویسیم. از آنجا که می خواهیم اگر فرمت رمز چیزی به غیر از داده ای از جنس عدد صحیح بود برنامه به کاربر اخطار دهد، داخل دستور else با استفاده از دستور System.out.println(); جمله Sorry, please enter the right format به معنی "متأسفیم، لطفا فرمت صحیح را وارد نمایید" را وارد می کنیم. اکنون یک بار برنامه خود را اجرا می کنیم و رمزی از جنس یک عدد صحیح مثلا عدد 2213 وارد می کنیم:

920317-IMAGE 1.jpg

می بینیم که برنامه داده ورودی را به درستی تشخیص می دهد. مجدد برنامه را اجرا کرده این بار هر نوع داده ای به غیر از یک عدد صحیح وارد می کنیم مثلا asd132 :

920317-IMAGE 2.jpg

همانطور که ملاحظه می شود از آنجا که جواب شرط false است برنامه دستور داخل else را اجرا می کند. در ادامه برنامه می خواهیم ببینیم که اگر رمز داده ای از جنس عدد صحیح بود، حال آیا این رمز با رمز تعبیه شده در برنامه هم خوانی دارد یا خیر. برای این منظور کد خود را به صورت زیر بازنویسی می کنیم:

  1. import java.util.Scanner;
  2.  
  3. class Project {
  4. public static void main(String[] args) {
  5. Scanner passwordInput = new Scanner(System.in);
  6. System.out.print("Please enter your password: ");
  7.  
  8. int builltInPassword = 2244176;
  9.  
  10. if (passwordInput.hasNextInt()
  11. && passwordInput.nextInt() == builltInPassword) {
  12. System.out.println("Thanks, you entered the right format"
  13. + " \nand also your password is correct");
  14. } else {
  15. System.out.println("Sorry, please enter the right format"
  16. + " \nor the right password");
  17. }
  18. }
  19. }
  20.  
  21.  

همانطور که مشاهده می شود یک متغیر از جنس int تحت عنوان builtInPassword به معنی رمزعبور تعبیه شده در سیستم ایجاد می کنیم و مقدار آن را معادل با 2244176 قرار می دهیم(این عدد به دلخواه انتخاب شده است). به طور خلاصه اگر کاربر داده ای از جنس عدد صحیح از یک سو، و همچنین عدد صحیحی معادل با 2244176 از سوی دیگر وارد کند خواهد توانست وارد حساب کاربری خود شود. به طور خلاصه، داخل شرط if یک علامت && قرار داده ایم که در زبان برنامه نویسی جاوا به معنی "و" می باشد. در واقع هر موقع که بخواهیم بیش از یک شرط را در برنامه خود بگنجانیم از این ساختار استفاده می کنیم(به خاطر داشته باشیم که در شرط قرار گرفته در سمت چپ && متد hasNextInt به شیئ ساخته شده از روی کلاس Scanner ضمیمه شده در حالیکه در شرط قرار گرفته در سمت راست علامت && متد nexInt به این شیئ ضمیمه شده است). سپس این شرط را می گذاریم که اگر شیئ ساخته شده از روی کلاس Scanner که همان passwordInput است به انضمام متد nextInt() که وظیفه دارد مقدار متغیر از جنس عدد صحیح را در خود ذخیره سازد دارای مقداری برابر با مقدار متغیر builtInPassword بود، عبارت Thanks, you entered the right format and also your password is correct به معنی "با تشکر، شما فرمت صحیح را وارد کردید و رمز عبور هم صحیح است" نمایش داده خواهد شد و در صورتیکه جواب به این دو شرط یا یکی از آنها false بود، عبارت Sorry, please enter the right format or the right password به معنی "متأسفیم، لطفا فرمت صحیح یا رمز عبور صحیح را وارد نمایید" نمایش داده خواهد شد. اکنون می توانیم برنامه خود را اجرا کنیم و نتیجه را ببینیم:

920317-IMAGE 3.jpg

از آنجا که داده ورودی از یک سو یک عدد صحیح است و از سوی دیگر معادل با مقدار متغیر builtInPassword است، جواب هر دو شرط true بوده و دستور مرتبط با آن اجرا می شود. مجدداً برنامه را اجرا کرده ولی این بار داده ای به غیر از عدد صحیح وارد می کنیم:

920317-IMAGE 4.jpg

می بینیم از آنجا که داده ورودی یک عدد صحیح نیست از این رو جواب به شرط passwordInput.hasNextInt() معادل با false خواهد بود و دستور مرتبط با false اجرا می شود. مجدد برای آخرین بار برنامه را اجرا کرده و این بار یک عدد صحیح وارد می کنیم اما مقدار این عدد صحیح با مقدار متغیر builtInPassword یکی نیست:

920317-IMAGE 5.jpg

از آنجا که در مثال فوق فقط یکی از شرط های برنامه برآورده شده است، به عبارت دیگر جواب به شرط passwordInput.nextInt() == builltInPassword معادل با false است، پس در کل جواب به شرط false بوده و متعاقباً دستور مرتبط با جواب false اجرا می شود.

شنبه 28 دی 1392  2:57 PM
تشکرات از این پست
kaka
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

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

پس از آشنایی با دستورات شرطی 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 چگونه بر مشکلی که در تصویر فوق پیش آمده فائق خواهد شد.

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

آموزش برنامه نویسی جاوا - قسمت ۱۹: به کارگیری دستور break در شرط ها

 

  1. import java.util.Scanner;
  2.  
  3. public class BreakStatement {
  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.  
  49.  

در واقع پس از وارد کردن عددی در بخش Console و زدن دکمه Enter این داده ورودی وارد برنامه می شود و از طریق کلاس Scanner در متغیر int که ایجاد کردیم و نام آن را monthNumber گذاشتیم ذخیره می شود. سپس متغیر خود را در دستور switch فرا می خوانیم. در اولین فاز، دستور switch می سنجد که ببیند آیا داده متغیرش معادل با case 1 می باشد یا خیر. چنانچه معادل با عدد یک بود در این مرحله شرط موجود در case 1 که دستور System.out.println("You were born in Farvardin."); می باشد را انجام می دهد. به محض اینکه این دستور انجام شد، دستور break به برنامه می گوید که دیگر نیازی به اجرای دستورات بعدی نبوده و بلافاصله می بایست برود به آخر برنامه. حال فرض کنیم که عدد ورودی 7 است. در این صورت برنامه اول به سراغ اولین شرط می رود و مشاهده می کند که عدد 7 با case 1 مطابقت ندارد پس دستور break از برنامه می خواهد که به سراغ دومین شرط برود و باز هم می بیند که نیازش برآورده نمی شود و این کار آنقدر تکرار می شود تا به مورد هفتم می رسد. در این مرحله برنامه می بیند که تطبیق صورت گرفت پس دستور break برنامه ما را وادار می سازد تا مابقی شروط را نادیده گرفته و مستقیماً به آخر برنامه برود. حال ببینیم که اگر دستورات break را نداشته باشیم چه اتفاقی خواهد افتاد! برای همین منظور می توانیم یا کلیه دستورات break را به صورت Comment در آوریم و یا از برنامه حذف کنیم که در اینجا مورد اول منطقی تر به نظر می رسد که در این صورت کد ما به شکل زیر در خواهد آمد:

  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.  
  49.  

همانطور که در آموزش های پیشین توضیح داده شد برای Comment کردن بخشی از کد می توان نشانگر موس را روی خط مد نظر قرار دادن و دکمه کنترل را به همراه علامت / فشار می دهیم. در این مرحله مجدداً برنامه را اجرا می کنیم و عددی دلخواه را از میان 1 تا 12 وارد می سازیم و نتیجه ای عجیب مشابه تصویر زیر خواهیم دید:

920327-19-IMAGE 1.jpg

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

920327-19-IMAGE 2.jpg

حال که با اهمیت دستور break آشنا شدیم می توانیم مجدداً با قرار دادن نشانگر موس خود روی خطوطی که این دستور در آن نوشته شده و فشردن هم زمان کلید های کنترل و علامت / آن ها را از حالت Comment بیرون در آوریم. نکته پایانی این قسمت از آموزش به بررسی این نکته می پردازد که زمان هایی ممکن است اتفاق افتد که کاربر به طور اشتباه عددی به غیر از 1 تا 12 را وارد می سازد مثلاً عدد 13 که در این صورت پس از اجرای برنامه خروجی زیر را خواهیم دید:

920327-19-IMAGE 3.jpg

در حقیقت از آنجا که هیچ گونه شرطی برای ورودی هایی به غیر از 1 تا 12 تعریف نکرده ایم، برنامه ما چیزی برای ارائه کردن در دست ندارد. برای رفع این مشکل می بایست از دستور default استفاده کنیم. در واقع این دستور حاکی از آن است که هر آنچه که به غیر از شروط case 1 تا case 12 وارد برنامه شد، می بایست شرط default اجرا شود. حال به تکمیل کد خود می پردازیم تا به برنامه دستور دهیم که اگر کاربری عددی به غیر از 1 تا 12 انتخاب کرد، جمله You made a mistake boy! را به معنی "پسر اشتباه کردی!" را نمایش دهد. برای همین منظور کد خود را به شکل زیر تکمیل می کنیم:

  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. default:
  46. System.out.println("You made a mistake boy!");
  47. break;
  48. }
  49. }
  50. }
  51.  

حال پس از اجرای برنامه و وارد کردن عددی به غیر از اعداد 1 تا 12 برنامه ما به درستی کار کرده و به ما اخطار خواهد داد:

920327-19-IMAGE 4.jpg

در پایان این قسمت از آموزش به برنامه نویسان مبتدی پیشنهاد می شود که از Copy کردن کدها از داخل آموزش خودداری نموده و سعی کنند خود کد ها را در محیط اکلیپس بنویسند چرا که با این کار هم می توانند مهارت سریع تایپ کردن خود را بهبود بخشیده و در ضمن راحت تر خواهند توانست به منطق پشت هر خط از کد پی ببرند زیرا در حین کدنویسی حتماً می بایست در مورد کاری که انجام می دهیم فکر کنیم که در غیر این صورت ممکن است بیشتر مرتکب اشتباه شویم.

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

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

در آموزش های هجدهم و نوزدهم با نحوه به کاری گیری دستور 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 بحث خواهیم کرد.

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

آموزش برنامه نویسی جاوا - قسمت ۲۱: به کارگیری کلاس String در قالب پروژه برنامه کد شهرهای ایران

پس از آشنایی با نحوه به کارگیری متغیر char به همراه switch در این آموزش قصد داریم تا به بررسی این مطلب بپردازیم که چگونه می توان کلاس String را به همراه دستورات شرطی switch مورد استفاده قرار داد. همچون روال گذشته، قصد داریم تا به منظور درک بهتر مطالب آموزشی یک سناریو تعریف کنیم که در آن برنامه ای کاربردی از ادغام String و switch خواهیم نوشت.

با نگاهی به آدرس اینترنتی http://www.countrycallingcodes.com با وب سایتی مواجه خواهیم شد که با تعیین نام کشورها، استان ها و همچنین شهرها پیش شماره کشور، استان و یا شهر مد نظر را به ما نشان می دهد. در این آموزش قصد داریم تا چنین پروژه ای را تعریف کنیم به این صورت که با نوشتن نام یکی از شهرهای ایران، نرم افزار پیش شماره تلفن آن شهر را به ما نشان دهد. به عبارت دیگر کاری که ما در این برنامه انجام خواهیم داد این است که داده ای از جنس string وارد برنامه می کنیم، سپس با استفاده از دستوراتی که از قبل در switch تعریف کرده ایم کامپیوتر پیش شماره آن شهر را به ما اعلام می کند.

ادامه مطلب را از دست ندهید.

نکته ای که پیش از شروع آموزش می بایست حتماً مد نظر قرار دهیم این است که به کاری گیری string ها در switch در نسخه 7 جاوا امکان پذیر شده است. بنابراین ما برای طراحی این نرم افزار نیاز داریم تا از قبل نسخه JDK 7 را نصب کرده باشیم. برای اینکه اطمینان حاصل کنیم که نسخه 7 روی کامپیوتر یا لپ تاپ ما نصب است به کنترل پنل رجوع کرده و روی آیکان Java کلیک می کنیم. سپس پنجره ای همچون پنجره زیر نمایان خواهد شد:


920327-21-IMAGE 1.jpg

در پنجره فوق روی دکمه About کلیک نموده سپس پنجره بعدی به شکل زیر ظاهر می شود:


920327-21-IMAGE 2.jpg

در این پنجره به وضوح نسخه جاوا نصب شده روی سیستم مشخص می باشد(در صورت نداشتن نسخه 7، این نسخه را می توان از لینک http://java.com/en/download/index.jsp دانلود نمود). حال که از نصب نسخه جاوا 7 روی سیستم مطمئن شدیم نوبت به تنظیم محیط برنامه نویسی اکلیپس برای استفاده از جاوا 7 می رسد. در واقع ما می توانیم به طور هم زمان چندین نسخه جاوا را روی سیستم خود داشته باشیم فقط نکته ای که نمی بایست فراموش کنیم این است که به اکلیپس دستور دهیم از کدام نسخه استفاده کند. به منظور دستور دادن به محیط برنامه نویسی اکلیپس برای استفاده از نسخه خاصی از JDK به بخش آموزشی اول از این سری از آموزش ها مراجعه نمایید. ایجاد یک پروژه برای این آموزش با ایجاد پروژه برای آموزش های پیشین کمی متفاوت است. در واقع در پنجره ای که برای ساخت یک پروژه جدید جاوا باز می شود می بایست از میان نسخه های JRE موجود نسخه 7 را انتخاب کنیم همانطور که در تصویر زیر قابل مشاهده است:


920327-21-IMAGE 3.jpg

حال پس از انتخاب نام 21st Session به معنی "جلسه بیست و یکم" به عنوان نام پروژه خود دکمه Finish را زده و سپس همانطور که قبلاً آموزش داده شده است یک کلاس جدید تحت عنوان CityCode به معنی "کد شهر" در آن ایجاد می کنیم. حال برای آنکه بتوانیم به صورت دینامیک مقادیر string را وارد کنیم می بایست از کلاس Scanner استفاده نماییم(جهت آشنایی با این کلاس، علاقمندان می توانند به آموزش های یازدهم، دوازدهم و سیزدهم مراجعه کنند). حال کد نیمه تکمیل ما به شکل زیر خواهد بود:


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

در کد فوق ما یک Instance یا "نمونه" از کلاس Scanner ایجاد کرده و نام آن را keyboardInput به معنی "ورودی کیبورد" گذاشته ایم. سپس یک کلاس از جنس String ایجاد کرده و نام آن را cityName به معنی "نام شهر" می گذاریم. در این مرحله به جای آنکه مقداری برای کلاس String تعریف کنیم، دستور می دهیم تا با استفاده از کلاس Scanner هر آنچه که از طریق کیبورد وارد برنامه شد به کلاس String ما اختصاص یابد. در واقع متد next() این وظیفه را دارا است تا ورودی هایی از هر جنس را از کیبورد دریافت کند. حال نیاز است تا switch را به شکلی تعریف کنیم که Value کلاس String را گرفته و بر اساس آن نام شهر مرتبط را روی صفحه نمایش نشان دهد. برای این منظور کد فوق را به شکل زیر تکمیل می کنیم:

  1. import java.util.Scanner;
  2. public class CityCode {
  3. public static void main(String[] args) {
  4.  
  5. System.out.print("Please Type the Name of the City ");
  6. Scanner keyboardInput = new Scanner(System.in);
  7. String cityName = keyboardInput.next();
  8. switch (cityName) {
  9. case "mashhad" :
  10. System.out.println("Mashhad Code Is 0511");
  11. break;
  12. case "arak" :
  13. System.out.println("Arak Code Is 0861");
  14. break;
  15. case "abadan" :
  16. System.out.println("Abadan Code Is 0631");
  17. break;
  18. case "tehran" :
  19. System.out.println("Tehran Code Is 021");
  20. break;
  21. case "amol" :
  22. System.out.println("Amol Code Is 0121");
  23. break;
  24. case "chabahar" :
  25. System.out.println("Chabahar Code Is 0545");
  26. break;
  27. case "sanandaj" :
  28. System.out.println("Sanandaj Code Is 0871");
  29. break;
  30. default :
  31. System.out.println("Sorry, This City Is Not Defined!");
  32. break;
  33.  
  34. }
  35. }
  36. }
  37.  
  38.  

در حقیقت از آنجا که می خواهیم دستور switch مقدار کلاس String را مورد سنجش قرار دهد، می بایست داخل پرانتز مقابل switch نام شیئی که از روی کلاس String ساختیم یا همان cityName را وارد کنیم. حال به منظور روشن تر شدن کد فوق به طور نمونه یکی از case ها را مورد بررسی قرار می دهیم. اولین گزینه که case "mashhad" : نام دارد حاکی از این شرط است که ببیند آیا مقدار داده ورودی از طریق کیبورد معادل با واژه mashhad است یا خیر، چنانچه پاسخ به این شرط true بود سپس دستور System.out.println("Mashhad Code Is 0511"); مبنی بر نوشتن جمله Mashhad Code Is 0511 به معنی "کد مشهد 0511 است" اجرا خواهد شد و در نهایت به دستور break; می رسد که بدان معنا است که از برنامه خارج شود. حال اگر داده ورودی معادل با این شرط نبود، شروط قرار گرفته در این switch یکی پس از دیگری اجرا می شوند و چنانچه هیچ کدام از case ها معادل با داده ورودی نبود دستور default اجرا خواهد شد. به عنوان نمونه برنامه را اجرا می کنیم و شهر اراک را وارد کرده و دکمه Enter را می زنیم(توجه نمایید که کلمه اراک به حرف کوچک تایپ شده است):

920327-21-IMAGE 40.jpg

خواهیم دید که برنامه به درستی پاسخ ما را خواهد داد. حال اگر شهری را بزنیم که در لیست وارد نشده است، برنامه گزینه default را اجرا خواهد کرد. به مثال زیر توجه کنید:

920327-21-IMAGE 50.jpg

می بینیم که عبارت Sorry, This City Is Not Defined! به معنی "متاسفیم، کد این شهر وارد برنامه نشده است" روی صفحه نمایش نشان داده خواهد شد. اگر توجه کرده باشید در مثالی که شهر اراک را وارد کردیم واژه arak به این شکل نوشته شده است که حرف اول آن کوچک است. حال ببینیم اگر این کلمه را به حرف بزرگ بنویسیم چه اتفاقی خواهد افتاد:

920327-21-IMAGE 6.jpg

می بینیم که برنامه نمی تواند تشخیص دهد که واژه Arak در عالم واقعیت همان arak است و این دو را دو Entity یا "هویت" مجزا می شناسد. برای رفع این مشکل یا می توانیم از کاربر خود بخواهیم که نام شهر خود را با حرف کوچک حتماً شروع کند و یا یک تغییر جزئی کوچک در برنامه خود ایجاد کنیم. از آنجا که گزینه دوم هم اصولی تر است و هم بار آموزشی دارد ما گزینه دوم را انتخاب خواهیم کرد. در واقع با اضافه کردن cityName = cityName.toLowerCase(); پس از جایی که String برنامه را تعریف کرده ایم این دستور را به برنامه خود می دهیم که مقدار کلاس String برنامه ما که cityName نام دارد می بایست به هر شکلی که وارد برنامه شود در نهایت به حروف کوچک تبدیل شود. به عبارت دیگر می گوییم که کلاس cityName عبارت است از cityName.toLowerCase(); یعنی یک cityName که حروف آن همگی کوچک شده باشند و از آنجا که حروف واژگانی که در switch تعریف شده اند همگی کوچک هستند(مثل mashhad ) برنامه با هیچ گونه مشکلی مواجه نخواهد شد. اکنون کد ما می بایست به شکل زیر درآید:

  1. import java.util.Scanner;
  2. public class CityCode {
  3. public static void main(String[] args) {
  4.  
  5. System.out.print("Please Type the Name of the City ");
  6. Scanner keyboardInput = new Scanner(System.in);
  7. String cityName = keyboardInput.next();
  8. cityName = cityName.toLowerCase();
  9. switch (cityName) {
  10. case "mashhad" :
  11. System.out.println("Mashhad Code Is 0511");
  12. break;
  13. case "arak" :
  14. System.out.println("Arak Code Is 0861");
  15. break;
  16. case "abadan" :
  17. System.out.println("Abadan Code Is 0631");
  18. break;
  19. case "tehran" :
  20. System.out.println("Tehran Code Is 021");
  21. break;
  22. case "amol" :
  23. System.out.println("Amol Code Is 0121");
  24. break;
  25. case "chabahar" :
  26. System.out.println("Chabahar Code Is 0545");
  27. break;
  28. case "sanandaj" :
  29. System.out.println("Sanandaj Code Is 0871");
  30. break;
  31. default :
  32. System.out.println("Sorry, This City Is Not Defined!");
  33. break;
  34.  
  35. }
  36. }
  37. }
  38.  
  39.  

به عنوان نمونه شهر دیگری را امتحان می کنیم:

920327-21-IMAGE 7.jpg

در مثال فوق می بینیم که شهر چابهار به شکل chaBaHaR نوشته شده است اما از آنجا که متد .toLowerCase() کلیه حروف را به کوچک تبدیل می کند می توانیم این اطمینان را داشته باشیم که واژه chaBaHaR به chabahar تبدیل شده که جواب شرط case "chabahar" : به آن نیز true خواهد بود.

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

آموزش برنامه نویسی جاوا - قسمت ۲۲: به کار گیری Loop یی از جنس for

اگر به حدوداً 40 تا 50 سال پیش بازگردیم، می بینیم که در آن دوران در مدارس روال به این شکل بود که برای تعطیلات نوروز دانش آموزان را مجبور می کردند تا به طور مثال از روی کتاب فارسی خود چند بار بنویسند چرا که در آن زمان پیک شادی وجود نداشت. در واقع دانش آموزان موظف بودند چیزی تکراری را بارها و بارها بنویسند تا مثلاً تعداد 7 سری از نوشته ها تکمیل شود. حال پس از آنکه 7 سری نوشتن از روی کتاب فارسی تکمیل شد از مغز دانش آموز دستور می رسد که کار به اتمال رسیده است و بازنویسی می بایست متوقف گردد.

در زبان برنامه نویسی به این کار Loop گفته می شود (لازم به ذکر است به جای آنکه معنی فارسی واژه Loop به معنی "حلقه" را حفظ کنیم، بهتر است بدون توجه به معنی فارسی آن، دستوری که این کار تحت آن انجام می شود را Loop بنامیم).

به عبارت دیگر Loop دستوری است که منجر می شود چیزی ثابت برای تعداد دفعاتی تعریف شده و یا تا بی نهایت تکرار شود. در زبان برنامه نویسی جاوا سه دستور برای استفاده از Loop ها وجود دارد که عبارتند از for، while، do که می توان هر یک از آنها را به جای دیگری مورد استفاده قرار داد اما نکته ای که می بایست مد نظر قرار داده شود این است که هر کدام از این دستورات می تواند بسته به اینکه چه انتظاری از Loop داریم کار ما را راحت تر کند.

ادامه مطلب را از دست ندهید.


نحوه به کار گیری for

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

حال برای آنکه به طور عملی با Loop یی از جنس for آشنا شویم پروژه ای جدید تحت عنوان 22nd Session به معنی "جلسه بیست و دوم" ایجاد کرده و کلاسی تحت عنوان ForLoop در آن ایجاد می کنیم:


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

حال برای آنکه بتوانیم از Loop یی از جنس for استفاده کنیم، می بایست دستور for(){} را به کد خود اضافه کنیم(توجه داشته باشیم که حرف اول for به صورت کوچک نوشته شده است). حال داخل پرانتز مقابل for می بایست سه پارامتر را بگنجانیم به این شکل که پارامتر اول می بایست نقطه آغازین Loop ما باشد و پارامتر دوم می بایست نقطه انتهایی Loop باشد و به عبارت دیگر می توان پارامتر دوم را یک شرط در نظر گرفت که مادامیکه true است Loop ادامه خواهد یافت و به محض اینکه false شود برنامه از Loop خارج خواهد شد و در نهایت در پارامتر سوم می بایست مشخص کنیم که مقدار پارامتر نقطه آغازین در هر بار Loop شدن به چه مقدار افزایش یابد. حال در این مثال قصد داریم تا به برنامه خود دستور دهیم که از نقطه آغازین 1 شروع کرده و پس از هر بار Loop شدن یک واحد به آن اضافه کند و در نهایت در نقطه پایانی 10 توقف نماید. کد تکمیل شده به شکل زیر خواهد بود:

  1. public class ForLoop {
  2. public static void main(String[] args) {
  3. for (int number = 1; number <= 10; number++) {
  4. System.out.println(number);
  5. }
  6. }
  7. }

در کد فوق یک متغیر از جنس int که در برگیرنده اعداد صحیح خواهد بود تحت عنوان number به معنی "عدد" با مقدار اولیه 1 برای نقطه آغازین تعریف کرده ایم سپس یک علامت ; قرار می دهیم و بلافاصله نقطه پایانی را برای Loop خود در نظر می گیریم که عبارت است از number <= 10 به این معنی که این Loop ادامه خواهد یافت تا زمانیکه Loop ما به عدد 10 برسد.(علت آنکه علامت کوچکتر مساوی گذاشته ایم این است که خود عدد 10 را هم شامل شود که در غیر این صورت مادامیکه Loop کوچکتر از 10 بود ادامه می یافت. به عبارت دیگر زمانیکه Loop به عدد 9 می رسید توقف می کرد زیرا که شرط قرار گرفته در Loop برآورده می شد). در نهایت مقداری که می خواهیم متغیر ما در هر دفعه Loop شدن افزایش یابد را در نظر می گیریم که در این مثال یک واحد است(برای آشنایی بیشتر با اعمال ریاضیاتی به آموزش Operator ها در قسمت هشتم مراجعه نمایید). حال برای آنکه Loop را روی مانیتور به نمایش در آوریم، نام متغیر خود را در دستور System.out.println(); قرار می دهیم. نکته ای که در مورد کد فوق وجود دارد این است که می توان متغیر را خارج از for نیز تعریف کرد. به عبارت دیگرکد فوق را به شکل زیر نیز می توان بازنویسی نمود:

در واقع ما یک متغیر از جنس int خارج از Loop ایجاد کرده ایم، حال داخل for مقدار اولیه، مقدار نهایی و همچنین مقدار افزایشی برای آن تعریف می کنیم. پس از اجرای برنامه خواهیم دید که Loop ما از عدد یک شروع شده و به عدد ده خاتمه می یابد:

920409-j22-IMAGE 1.jpg

اکنون برای آنکه مفهوم for برای ما نهادینه تر شود شروع می کنیم به اعمال یکسری تغییر در دستور for تا اینکه ببینیم چه نتیجه ای در بر خواهد داشت. فرض کنیم که می خواهیم برنامه ای طراحی کنیم که از عدد یک شروع می کند به شمردن و سه تا سه تا افزایش می یابد تا به عدد بیست و دو برسد. برای این منظور کد فوق را به شکل زیر بازنویسی می کنیم:

  1. public class ForLoop {
  2. public static void main(String[] args) {
  3. for (int number = 1; number <= 22; number += 3) {
  4. System.out.println(number);
  5. }
  6. }
  7. }
  8.  
  9.  

خروجی برنامه جدید به شکل زیر خواهد بود:

920409-j22-IMAGE 2.jpg

همانطور که مشاهده می شود Loop ما کار خود را از عدد یک شروع می کند. همانطور که در آخرین پارامتر دستور داده ایم، در هر بار Loop شدن می بایست سه واحد به واحد قبلی اضافه شود، از این رو در بار دوم Loop شدن سه واحد به واحد یک اضافه شده مقدار متغیر به چهار افزایش می یابد، در بار بعد سه واحد به عدد چهار اضافه می شود و به هفت افزایش می یابد الی آخر. حال فرض کنیم که می خواهیم برنامه خود را به نوعی بازنویسی کنیم که تا بی نهایت شروع به شمردن کند. برای این منظور کد خود را به شکل زیر بازنویسی خواهیم کرد:

  1. public class ForLoop {
  2. public static void main(String[] args) {
  3. for (int number = 1; number > 0; number++) {
  4. System.out.println(number);
  5. }
  6. }
  7. }

در این کد مقدار اولیه را یک در نظر گرفته ایم، سپس به Loop دستور داده ایم تا زمانیکه مقدار متغیر number بزرگتر از صفر است در هر بار Loop شدن یک واحد به آن اضافه کند. در واقع از آنجا که مقدار اولیه متغیر ما یک بوده و منطقاً عدد یک از صفر بزرگتر است پس هیچ نقطه پایانی هم برای آن در نظر گرفته نشده است، Loop ما تا بی نهایت ادامه خواهد داشت و در هر بار Loop شدن یک واحد به آن اضافه خواهد شد. در واقع خروجی برنامه به شکل زیر خواهد بود:

920409-j22-IMAGE 3.jpg

در واقع این Loop که ایجاد کردیم تا بی نهایت ادامه خواهد یافت تا اینکه ما خود آن را متوقف نماییم:

920409-j22-IMAGE 4.jpg

که این کار با فشردن دکمه قرمز رنگ در بخش Console تحت عنوان Terminate عملی خواهد شد که در تصویر فوق با یک بیضی قرمز رنگ مشخص شده است. حال فرض کنیم می خواهیم خروجی Loop را با یک string یا عبارت ادغام نماییم. برای این منظور به شکل زیر کد خود را بازنویسی می کنیم:

  1. public class ForLoop {
  2. public static void main(String[] args) {
  3. for (int number = 1; number <= 10; number++) {
  4. System.out.println("My Number Is: " + number);
  5. }
  6. }
  7. }

در Statement یی که در آن دستور داده ایم تا نوشته ای روی صفحه مانیتور چاپ شود که همان System.out.println(); می باشد یک string تحت عنوان My number Is: به معنی "شماره من هست:" نوشته ایم و بلافاصله بعد از آن از یک Operator به علاوه استفاده کرده ایم تا string خود را به یک متغیر وصل کنیم که در اینجا همان متغیر number است. حال خروجی برنامه به شکل زیر خواهد بود:

920409-j22-IMAGE 5.jpg

اکنون فرض کنیم که هر دفعه که قرار است برنامه یک Loop انجام دهد می خواهیم تا جواب Loop در عدد 10 ضرب شود سپس حاصلضرب خروجی Loop در عدد 10 در بخش Console به نمایش در آید. برای همین منظور کد خود را به شکل زیر بازنویسی می کنیم:

  1. public class ForLoop {
  2. public static void main(String[] args) {
  3. for (int number = 1; number <= 10; number++) {
  4. int multiply = number * 10;
  5. System.out.println("My Number Is: " + multiply);
  6. }
  7. }
  8. }

در این کد ما یک متغیر جدید از جنس int ایجاد کرده ایم تحت عنوان multiply به معنی "ضرب کردن" و مقدار آن را عبارت است از هرآنچه مقدار متغیر number اختصاص داده شده به for بود، ضرب در عدد 10 و در نهایت برای آنکه مقدار متغیر جدید ما در محیط Console به نمایش در آید در دستور System.out.println(); به جای نام متغیر قبلی، نام متغیر جدید که همان multiply است را قرار می دهیم که در این صورت خروجی برنامه به شکل زیر خواهد بود:

920409-j22-IMAGE 6.jpg

به عنوان مثال آخر، این نکته را نیز می بایست مد نظر قرار داده که به جای متغیری از جنس int که برای اعداد صحیح است، می توان از double هم برای استفاده از اعداد اعشاری هم استفاده کرد. فرض کنیم که می خواهیم برنامه خود را به این شکل تغییر دهیم که مقدار متغیر اختصاص داده شده به for پس از آنکه Loop شد در عدد دوازده صدم ضرب شود. برای این منظور کد خود را به شکل زیر بازنویسی می کنیم:

  1. public class ForLoop {
  2. public static void main(String[] args) {
  3. for (int number = 1; number <= 10; number++) {
  4. double multiply = number * 0.12;
  5. System.out.println("My Number Is: " + multiply);
  6. }
  7. }
  8. }

در واقع در این کد تنها تغییری که رخ داده این است که جنس متغیر multiply از int به double تغییر یافته و همچنین عددی که می بایست مقدار متغیر number در آن ضرب شود از عدد ده به دوازده صدم تغییر پیدا کرده است. حال می توانیم انتظار داشته باشیم که خروجی برنامه ما به شکل زیر تغییر یابد:

920409-j22-IMAGE 7.jpg

پس از آشنایی با Loop یی از جنس for در جلسه آموزشی آینده به بررسی دیگر انواع Loop ها همچون while خواهیم پرداخت.

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

آموزش برنامه نویسی جاوا - قسمت 23: به کارگیری Loop یی از جنس while

پس از آشنایی با اولین و پیچیده ترین نوع Loop ها در آموزش بیست و دوم، حال نوبت به بررسی نوع دیگری از انواع Loop ها تحت عنوان while می رسد. در واقع بیشترین وجه تمایز for و while تفاوت ساختاری است. در Loop یی از جنس while بر خلاف for ما ابتدا به ساکن می بایست متغیر خود را تعریف نماییم سپس در while() شرط خود و یا همان نقطه پایانی Loop را در نظر بگیریم و در داخل دو علامت {} که مقابل while() قرار می گیرد مقدار افزایش متغیر را تعریف کنیم. برای روشن تر شدن مطالب فوق، پروژه ای تحت عنوان 23rd Session به معنی جلسه بیست و سوم ایجاد کرده سپس یک کلاس تحت عنوان WhileLoop در آن ایجاد می کنیم و مطالب فوق را در آن به صورت زیر اعمال می کنیم:

ادامه مطلب را از دست ندهید.


  1. public class WhileLoop {
  2. public static void main(String[] args) {
  3. int number = 1;
  4. while (number <= 10) {
  5. System.out.println("My Number Is: " + number);
  6. }
  7. }
  8. }

همانطور که مشاهده می کنیم، متغیری از جنس int خارج از Loop تعریف کرده ایم و Value اولیه آن را معادل با یک قرار داده ایم. سپس ساختار اولیهLoop یی از جنس while را به شکل while(){} نوشته ایم و به این صورت آن را تکمیل کرده ایم که شرط خود یا همان نقطه پایانی را داخل پرانتز به صورت number <= 10 نوشته ایم. به عبارت دیگر مادامیکه مقدار متغیر ما تحت عنوان number کوچکتر یا مساوی با ده باشد، این Loop ادامه خواهد یافت. سپس در داخل دو علامت {} خروجی برنامه را می نویسیم و از آنجاییکه می خواهیم خروجی برنامه ما در پنجره Console به نمایش در آید از دستوری System.out.println(); استفاده می کنیم و در آن پارامتری تحت عنوان My Number Is: به معنی "عدد من هست:" به علاوه نام متغیر خود که همان number است را می نویسیم. حال بایستی انتظار داشته باشیم پس از اجرای برنامه مادامیکه مقدار متغیر ما کوچکتر یا مساوی با ده است این Loop اجرا شود. پس از اجرای برنامه با موقعیتی مواجه می شویم که در تصویر زیر نشان داده شده است:

920409-j23-IMAGE 1.jpg

در حقیقت از آنجا که در Loop خود تعریف نکرده ایم که مقدار متغیر ما به چه میزان در هر بار Loop شدن افزایش یابد، این Loop تا بی نهایت ادامه خواهد یافت(اگر به دایره قرمز رنگ در عکس توجه کنیم می بینیم که نشانگر لیستی طولانی از Loop شدن متغیر است که مسلماً بیش از 10 بار می باشد). برای رفع این مشکل نیاز داریم تا مقدار افزایشی متغیر خود در هر بار Loop شدن را به برنامه اضافه کنیم. نکته ای که در اینجا می بایست مد نظر قرار دهیم این است که در while بر خلاف for این مقدار افزایشی را می بایست در داخل دو علامت {} قرار دهیم و این در حالی است که جای مقدار افزایشی در نحوه اجرای برنامه خیلی تعیین کننده است. برای روشن شدن این مطلب کد خود را به شکل زیر تکمیل می کنیم:

  1. public class WhileLoop {
  2. public static void main(String[] args) {
  3. int number = 1;
  4. while (number <= 10) {
  5. number++;
  6. System.out.println("My Number Is: " + number);
  7. }
  8. }
  9. }

در این کد پیش از اجرای دستور System.out.println("My Number Is: " + number); برنامه یک واحد به مقدار متغیر number اضافه کرده سپس دستور بعدی که به نمایش در آوردن My number is: + number در پنجره Console است را اجرا می کند که در این صورت همانطور که ملاحظه می شود مقدار اولیه متغیر ما مساوی با یک است، حال while به برنامه دستور می دهد که یک واحد به مقدار اولیه متغیر اضافه شود و در نهایت مقدار نهایی را در پنجره Console به نمایش در آورد که این مقدار نهایی معادل با عدد دو است چرا که مقدار افزایشی را number++ تعریف کرده ایم. خروجی برنامه در این مرحله به شکل زیر خواهد بود:

920409-j23-IMAGE 2.jpg

همانطور که انتظار می رفت اولین خروجی برنامه عدد دو است و این کار ادامه می یابد تا Loop طراحی شده توسط ما به عدد ده می رسد. از آنجا که ما خود به برنامه دستور داده ایم مادامیکه مقدار متغیر کوچکتر یا مساوی با ده است این کار ادامه یابد پس در فاز یکی مانده به آخر که My Number Is: 10 می باشد جواب شرط قرار گرفته در داخل پرانتز true است پس این Loop یک بار دیگر اجرا می شود و عدد یازدهم به نمایش در می آید اما در این مرحله از برنامه از آنجا که جواب شرط داخل پرانتز به عدد یازده معادل با false می باشد برنامه ما از Loop خارج خواهد شد. حال ببینیم اگر جای مقدار افزایشی را از ماقبل دستور نمایش خروجی برنامه به بعد از آن تغییر دهیم چه اتفاقی خواهد افتاد. برنامه خود را به شکل زیر بازنویسی خواهیم کرد:

  1. public class WhileLoop {
  2. public static void main(String[] args) {
  3. int number = 1;
  4. while (number <= 10) {
  5. System.out.println("My Number Is: " + number);
  6. number++;
  7. }
  8. }
  9. }

برنامه را اجرا می کنیم:

920409-j23-IMAGE 3.jpg

همانطور که ملاحظه می شود خروجی برنامه ما با برنامه پیشین کاملاً متفاوت است. برای روشن شدن این وجه تمایز به بررسی خط به خط کد خود می پردازیم. پس از اجرای برنامه، دستور while می بیند که مقدار اولیه تعیین شده برای متغیر number معادل با عدد یک است و پاسخ به شرط داخل پرانتز که می گوید این عدد می بایست کوچکتر از عدد ده باشد و یا حداکثر مساوی با عدد ده باشد، نیز true است پس بلافاصله دستور System.out.println(); را اجرا می کند و در پنجره Console عبارت My Number Is: 1 به نمایش در می آید. پس از به نمایش در آمدن عبارت My Number Is: 1 حال نوبت به اجرای دستور number++ می رسد که عبارت از آن است که یک واحد به مقدار متغیر number اضافه کند. در واقع پس از به نمایش در آمدن اولین عبارت یک واحد به مقدار متغیر number اضافه می شود. این کار ادامه می یابد تا به عدد نه می رسیم. از آنجا که جواب به شرط number <= 10 معادل با true است این Loop یک بار دیگر اتفاق می افتد و Value اختصاص داده شده به متغیر number معادل با عدد ده می شود. حال برنامه می خواهد تا مجدداً Loop شود از اینرو اجرای برنامه یک بار دیگر از اول شروع می شود اما از آنجا که در شرط داخل پرانتز قید کرده ایم که مقدار متغیر می بایست کوچکتر و یا حداکثر مساوی با عدد ده باشد و در این مرحله مقدار متغیر برابر با ده است، برنامه از Loop خارج خواهد شد و بر خلاف برنامه پیشین عدد یازده به نمایش در نخواهد آمد و برنامه ما به پایان می رسد.

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

آموزش برنامه نویسی جاوا - قسمت ۲۴: به کارگیری Loopیی از جنس do-while

پس از آشنایی با نحوه عمکرد Loop هایی از جنس for و while در دو قسمت آموزشی پیشین، حال نوبت به بررسی نوع دیگری از Loop ها تحت عنوان do-while می رسد. وجه تمایز Loop یی از جنس do-while با Loop یی از جنس while در این است که در do-while حتی اگر جواب به شرط داخل پرانتزwhile() معادل با false باشد، باز هم دستور System.out.println(); حداقل یک بار اجرا می شود و این در حالی است که اگر ما Loop یی از جنس while داشته باشیم و پاسخ به شرط داخل پرانتز while() معادل با false باشد هیچ نوع خروجی از برنامه نباید انتظار داشته باشیم. برای روشن تر شدن این وجه تمایز پروژه ای جدید تحت عنوان 24th Session به معنی "جلسه بیست و چهارم" به همراه کلاسی تحت عنوان DoWhileLoop ایجاد می کنیم و آن را به شکلی تکمیل می کنیم که در ادامه مطلب آمده است.


  1. public class DoWhileLoop {
  2. public static void main(String[] args) {
  3. int number = 12;
  4. while (number <= 10) {
  5. System.out.println("My Number Is: " + number);
  6. number++;
  7. }
  8. }
  9. }

در این کد به برنامه طراحی شده دستور داده ایم مادامیکه مقدار متغیر number کوچکتر یا مساوی با عدد ده است این Loop ادامه پیدا کند اما نکته در اینجا است که مقدار اولیه متغیر معادل با عدد دوازده است و از آنجا که جواب به شرط داخل پرانتز از ابتدا false است، برنامه در پنجره Console هیچ چیز نمایش نخواهد داد و خروجی برنامه به شکل زیر خواهد بود:

920409-j24-IMAGE 1.jpg

حال کد فوق را می خواهیم به Loop یی از جنس do-while تبدیل نماییم. برای این منظور کد خود را به شکل زیر بازنویسی می کنیم:

  1. public class DoWhileLoop {
  2. public static void main(String[] args) {
  3. int number = 1;
  4. do {
  5. System.out.println("My Number Is:" + number);
  6. number++;
  7. } while (number <= 10);
  8. }
  9. }

در این کد یک متغیر از جنس int تحت عنوان number به مقدار Value اولیه یک تعریف کرده ایم. سپس یک Block به شکل do{} ایجاد می کنیم(همانطور که در آموزش های پیشین گفته شد block به یک قسمت کد در برنامه نویسی گفته می شود). حال مابین دوعلامت {} مرتبط با do دستوری که می خواهیم روی صفحه مانیتور به نمایش در آید را می نویسیم و سپس دستور می دهیم که در هر بار Loop شدن یک واحد به متغیر number اضافه شود. پس از پایان Block مرتبط با do حال نوبت به نوشتن شرط Loop است که به صورت while(number<=10); می نویسیم. به عبارت دیگر به برنامه دستور می دهیم که مادامیکه مقدار متغیر number کوچکتر یا حداکثر مساوی با عدد ده است این کار ادامه یابد. پس از اجرای برنامه خروجی زیر مشاهده خواهد شد:

920409-j24-IMAGE 2.jpg

می بینیم که در برنامه فوق Loop یی از جنس do-while عملکردی همانند Loop یی از جنس while دارد. حال با تغییری که در کد خود خواهیم داد وجه تمایز این دو نوع Loop به خوبی مشخص خواهد شد. برای همین منظور کد خود را به شکل زیر بازنویسی می کنیم:

  1. public class DoWhileLoop {
  2. public static void main(String[] args) {
  3. int number = 12;
  4. do {
  5. System.out.println("My Number Is:" + number);
  6. number++;
  7. } while (number <= 10);
  8. }
  9. }

در واقع تنها تغییری که در کد انجام داده ایم این است که مقدار اولیه متغیر number را دوازده تعیین کرده ایم. حال برنامه را اجرا می کنیم:

920409-j24-IMAGE 3.jpg

اگر ما در برنامه خود از Loop یی از جنس while استفاده کرده بودیم، برنامه به ما هیچ خروجی نمی داد اما از آنجا که ما از یک do-while استفاده کرده ایم، علیرغم اینکه پاسخ به شرط while(number <= 10); معادل با false است اما Loop یک بار اجرا می شود (به این دلیل پاسخ false است که مقدار اولیه متغیر number معادل با عدد دوازده است). اما از آنجا که دستور System.out.println(); در Block مرتبط با do نوشته شده است، برنامه ما حداقل یک بار این دستور را اجرا خواهد کرد چرا که محل قرار گرفتن این دستور در do است و پیش از آنکه برنامه به شرط قرار گرفته داخل پرانتز برسد، این دستور یک بار اجرا شده است.

خارج شدن از یک Loop

به طور معمول زمانیکه جواب به شرط قرار گرفته در Loop معادل با false شود، برنامه به طور خودکار از Loop خارج خواهد شد. اما زمان هایی برای ما پیش می آید که خودمان عمداً می خواهیم برنامه از Loop خارج شود که برای این منظور از دستور break; استفاده می کنیم. برای روشن شدن این مطلب می توانیم در همان پروژه قبلی که ایجاد کرده بودیم یک کلاس جدید تحت عنوان ExitALoop به معنی "خروج از یک Loop " ایجاد کنیم و یک Loop از جنس while در آن بسازیم. کد ما به شکل زیر خواهد بود:

  1. public class ExitALoop {
  2. public static void main(String[] args) {
  3. int number = 0;
  4. while (number < 1000) {
  5. number += 100;
  6. System.out.println("My Number Is: " + number);
  7. }
  8. }
  9. }

حال پس از اجرای برنامه، خروجی برنامه به شکل زیر خواهد بود:

920409-j24-IMAGE 4.jpg

در کد فوق ما دستور داده ایم که مقدار اولیه متغیر برابر با صفر باشد و مادامیکه متغیر کوچکتر از هزار است Loop تکرار شده و هر دفعه به میزان صد واحد به آن اضافه شود. حال فرض کنیم که می خواهیم Loop ما پس از آنکه مقدار متغیر به عدد هفتصد رسید متوقف شده و برنامه از Loop خارج شود. برای این منظور کد خود را به شکل زیر تکمیل می کنیم:

  1. public class ExitALoop {
  2. public static void main(String[] args) {
  3. int number = 0;
  4. while (number < 1000) {
  5. number += 100;
  6. System.out.println("My Number Is: " + number);
  7. if (number == 700) {
  8. break;
  9. }
  10. }
  11. }
  12. }

کاری که در کد فوق انجام داده ایم این است که یک شرط داخل Block مرتبط با while از جنس if گذاشته ایم مبنی بر اینکه اگر مقدار متغیر number معادل با عدد هفتصد بود برنامه می بایست با استفاده از دستور break; از داخل Loop خارج شده و بالتبع Loop ادامه نخواهد یافت(لازم به ذکر است که در زبان برنامه نویسی جاوا علامت = برای اختصاص دانه مقداری به یک متغیر و یا کلاس است واگر بخواهیم مساوی بودن چیزی را بسنجیم بایستی از دو علامت مساوی پشت سر هم استفاده کنیم). حال خروجی برنامه به شکل زیر خواهد بود:

920409-j24-IMAGE 5.jpg

ادامه دادن یک Loop یا استفاده از دستور continue;

زمان هایی در برنامه نویسی برای ما پیش خواهد آمد که نیاز داریم اگر مقدار متغیر به مقدار خاصی رسید، به برنامه دستور دهیم که کار خود را ادامه دهد که برای این منظور از دستور continue; استفاده می کنیم. برای روشن شدن مطلب کد خود را به شکل زیر بازنویسی می کنیم:

  1.  
  2. public class ExitALoop {
  3. public static void main(String[] args) {
  4. int number = 0;
  5. while (number < 1000) {
  6. number += 100;
  7. if (number == 700) {
  8. continue;
  9. }
  10. System.out.println("My Number Is: " + number);
  11. }
  12. }
  13. }

در کد فوق دستور داده ایم مادامیکه مقدار متغیر number کوچکتر از هزار است، تعداد صد واحد به مقدار متغیر اضافه شود و در نهایت در بخش Console به نمایش در آید. اضافه بر این شرطی گذاشته ایم مبنی بر اینکه اگر مقدار متغیر برابر با عدد هفتصد شد Loop ما ادامه یابد. به عبارت دیگر زمانیکه Loop به عدد هفتصد رسید به جای آنکه برنامه ادامه یابد و عبارت My Number Is: 700 در پنجره Console به نمایش درآید، برنامه به ابتدای Loop رفته و کار خود را "ادامه" می دهد. در واقع خروجی برنامه به شکل زیر خواهد بود:

920409-j24-IMAGE 6.jpg

همانطور که مشاهده می شود عدد هفتصد در خروجی برنامه وجود ندارد چرا که خود به برنامه دستور داده ایم به محض اینکه مقدار متغیر معادل با عدد هفتصد شد به جای نمایش آن به ابتدای Loop رفته و کار خود را ادامه دهد.

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

آموزش برنامه نویسی جاوا - قسمت ۲۵:بیش از یک متغیر در lOOP در پروژه جدول ضرب

در ادامه مبحث Loop ها در زبان برنامه نویسی جاوا بایستی گفت زمان هایی در طراحی پروژه ها برای برنامه نویسان پیش خواهد آمد که نیاز دارند تا در Loop خود بیش از یک متغیر را مورد سنجش قرار دهند. در واقع این مسئله به مثابه یکی از ویژگی های بسیار کاربردی در زبان برنامه نویسی جاوا است. برای همین منظور مبحث قرار دادن بیش از یک متغیر در Loop یی از جنس for را در قالب پروژه ای کاربردی توضیح خواهیم داد. جدول ضرب! ادامه مطلب را از دست ندهید.


طراحی پروژه جدول ضرب

طبق روال گذشته ابتداً نیاز به یک سناریو داریم:

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

برای این منظور پروژه ای جدید تحت عنوان Helping My Sibling 25th Session به معنی "کمک به خواهر/برادرم جلسه بیست و پنجم" ایجاد می کنیم(علت اینکه از واژه انگلیسی Sibling استفاده می کنیم این است که هم مفهوم Sister به معنی "خواهر" را و هم مفهوم Brother به معنی "برادر" را شامل می شود). یک کلاس در پروژه خود تحت عنوان MyMultiplyProgram به معنی "برنامه ضرب من" ایجاد می کنیم. در این پروژه می خواهیم حاصلضرب عدد دو را در دیگر اعداد از یک تا پنجاه به خواهر یا برادرمان آموزش دهیم. به عبارت دیگر می خواهیم برنامه پاسخ هایی از جنس دو یکی دو تا، دو دو تا چهار تا و دو سه تا شش تا و الی آخر را به ما نشان دهد.

از آنجا که می خواهیم نحوه به کار گیری دو متغیر را در Loop یی از جنس for را آموزش دهیم، نیاز داریم تا دو متغیر تحت عناوین numberOne و numberTwo به معنی به ترتبیب "عدد یک" و "عدد دو" تعریف کنیم. در این مرحله از برنامه، کد ما به شکل زیر خواهد بود:


  1. public class MyMultiplyProgram {
  2. public static void main(String[] args) {
  3. int numberOne;
  4. int numberTwo;
  5. }
  6. }

در واقع متغیر numberOne قرار است عدد دو را در خود جای دهد که در دیگر اعدادی که در متغیر numberTwo ذخیره می شوند ضرب شود. حال Block مرتبط با for را به برنامه اضافه می کنیم و کد ما به شکل زیر تکمیل خواهد شد:

  1. public class MyMultiplyProgram {
  2. public static void main(String[] args) {
  3. int numberOne;
  4. int numberTwo;
  5. for () {
  6.  
  7. }
  8. }
  9. }

در این مرحله همانطور که قبلاً آموزش داده شده است، می بایست داخل پرانتز را با نقطه آغازین Loop و نقطه پایانی و در نهایت مقدار افزایشی تکمیل کنیم. برای این منظور کد فوق را به شکل زیر تکمیل می کنیم:

  1. public class MyMultiplyProgram {
  2. public static void main(String[] args) {
  3. int numberOne;
  4. int numberTwo;
  5. for (numberOne = 2, numberTwo = 1;) {
  6.  
  7. }
  8. }
  9. }

نکته جدید که در این آموزش حتماً می بایست مد نظر قرار داده شود این است که هر موقع بخواهیم بیش از یک متغیر را برای Loop یی در نظر بگیریم، می بایست متغیر ها را با یک کاما از یکدیگر جدا ساخته و پس از آخرین متغیر یک علامت ; قرار دهیم. در این مثال Value اولیه برای متغیر numberOne را عدد دو در نظر گرفته ایم و Value اولیه برای متغیر numberTwo را عدد یک در نظر می گیریم چرا که قرار است برنامه از حاصلضرب دو یکی دو تا شروع به اجرا کند. از آنجا که قرار است حاصلضرب عدد دو را از یک تا پنجاه به خواهر و یا برادر خود آموزش دهیم از این رو در شرط نقطه پایانی برنامه قید می کنیم که این برنامه تا جایی ادامه یابد که حاصلضرب عدد دو در عدد دیگر کوچکتر از یا مساوی با عدد صد شود. حال کد خود را به شکل زیر تکمیل می کنیم:

  1. public class MyMultiplyProgram {
  2. public static void main(String[] args) {
  3. int numberOne;
  4. int numberTwo;
  5. for (numberOne = 2, numberTwo = 1; numberTwo*numberOne <= 100;) {
  6.  
  7. }
  8. }
  9. }

حال پس از آنکه یک علامت ; پس از شرط نقطه پایانی Loop قرار دادیم، نوبت به تعریف کردن چگونگی اضافه شدن متغیر numberTwo می رسد. در واقع از آنجا که مقدار متغیر numberOne که معادل با دو است و همواره ثابت است، فقط نیاز است تا مقدار متغیر numberTwo یکی یکی افزایش یابد. به عبارت دیگر در این برنامه نیاز داریم تا در هر بار Loop شدن یک واحد به متغیر numberTwo اضافه شود زیرا می خواهیم عدد دو را در دیگر اعداد ضرب کنیم که این اعداد از یک شروع شده و به عدد پنجاه ختم می شود. از این رو کد ما می بایست به شکل زیر تکمیل شود:

  1. public class MyMultiplyProgram {
  2. public static void main(String[] args) {
  3. int numberOne;
  4. int numberTwo;
  5. for (numberOne = 2, numberTwo = 1;
  6. numberTwo*numberOne<=100; numberTwo++) {
  7. }
  8. }
  9. }
  10.  
  11.  

حال که شرط Loop برنامه خود را تکمیل کردیم، نوبت به نوشتن کد برای خروجی برنامه می رسد. برای این منظور می بایست دستور خروجی برنامه را مابین دو علامت {} که مقابل for قرار گرفته اضافه نماییم. حال می خواهیم تا اولین خروجی برنامه به صورت The result of 2 * 1 is 2 به معنی "نتیجه دو در یک می شود دو" نمایش داده شود. از این رو می بایست دستور System.out.println(); را به شکلی تکمیل کنیم که چنین خروجی را در پنجره Console به نمایش در آورد. کد تکمیل شده برنامه به شکل زیر خواهد بود:

  1. public class MyMultiplyProgram {
  2. public static void main(String[] args) {
  3. int numberOne;
  4. int numberTwo;
  5. for (numberOne = 2, numberTwo = 1; numberTwo * numberOne <= 100; numberTwo++) {
  6. System.out.println("The result of " + numberOne + " * " + numberTwo + " is " + (numberOne * numberTwo));
  7. }
  8. }
  9. }

حال به توضیح آنچه مابین دو پرانتز System.out.println(); قرار گرفته است خواهیم پرداخت. در ابتدا می خواهیم که عبارت The result of به معنی "نتیجه ی" ابتدای خط در پنجره Console به نمایش در آید. برای همین منظور عبارت فوق را مابین “ “ قرا می دهیم. سپس نیاز داریم تا بگوییم مثلاً دو ضرب در یک، از اینرو یک علامت + قرار داده و نام متغیر اول که numberOne است را می نویسیم سپس نیاز داریم تا علامت * روی صفحه مانیتور به نمایش در آید اما اگر خود علامت * را پس از متغیر numberOne بنویسیم، برنامه به شکل یک Operator به آن نگاه می کند پس باید پس از قرار دادن یک علامت + آن را داخل دو علامت “ “ قرار دهیم که در حین Compile شدن اکلیپس آن را به عنوان یک کاراکتر یا حتی یک متن تلقی کند. سپس یک علامت + دیگر قرار داده و نام متغیر دوم که numberTwo است را می نویسیم. تا اینجای کار اولین خروجی برنامه The result of 2*1 خواهد بود. حال یک علامت + دیگر قرار داده و واژه is را به معنی "هست" داخل دو علامت “ “ می نویسیم. حال خروجی برنامه The result of 2*1 is خواهد شد. همانطور که در آموزش های پیشین توضیح داده شد هر زمانیکه بخواهیم یک عمل ریاضیاتی را به طور مجزا از دیگر بخش های برنامه اجرا کنیم، می بایست تا آن را داخل دو پرانتز قرار دهیم و از آنجا که در این برنامه می خواهیم حاصلضرب مقادیر متغیرهای numberOne و numberTwo را بدست آوریم پس نیاز داریم تا عبارتی همچون (numberOne*numberTwo) را نیز پس از نوشتن یک علامت+ به آخر کد اضافه کنیم. در این مرحله برنامه ما تکمیل شده است و می توانیم آن را اجرا کنیم:

920409-j25-IMAGE 1.jpg

همانطور که در تصویر بالا مشاهده می شود برنامه ما به درستی کار می کند. فلش قرمز رنگ به معنی آن است که این لیست ادامه داشته و تا نشان دادن حاصلضرب عدد دو ضرب در پنجاه ادامه خواهد یافت. در واقع از آنجا که حاصلضرب عدد دو در پنجاه مساوی با صد خواهد بود و در Loop خود تعریف کرده ایم که تا عدد صد این Loop ادامه یابد، از این رو برنامه از Loop پس از رسیدن به عدد صد خارج خواهد شد. پیش از به پایان رساندن این بخش از آموزش نیاز است تا دو نکته یادآوری شود. نکته اول از این قرار است که ما می توانیم با Operator هایی همچون به علاوه و منها انواع متغیرها را نه تنها با یکدیگر بلکه حتی با string ها نیز ادغام کنیم که در این صورت خروجی برنامه یک string خواهد بود. نکته دوم اینکه برای خوانایی بیشتر خروجی برنامه می توان از Space قبل و بعد از علامت ضرب که داخل دو علامت “ “ قرار گرفته است استفاده کرد. برای روشن شدن مطلب کد فوق را به شکل زیر تغییر می دهیم:

  1. public class MyMultiplyProgram {
  2. public static void main(String[] args) {
  3. int numberOne;
  4. int numberTwo;
  5. for (numberOne = 2, numberTwo = 1; numberTwo * numberOne <= 100; numberTwo++) {
  6. System.out.println("The result of" + numberOne + "*" + numberTwo + "is" + (numberOne * numberTwo));
  7. }
  8. }
  9. }

حال چنانچه برنامه را اجرا کنیم، خروجی برنامه مشابه تصویر زیر خواهد بود:

920409-j25-IMAGE 2.jpg

در تصویر فوق مشاهده می شود که نحوه عملکرد برنامه هیچ تغییری نکرده است با این تفاوت که به خاطر حذف Space ها خوانایی جملات به مراتب کمتر شده است. حال برنامه نویسان مبتدی خواهند توانست تا با تسلط به مباحث Loop نرم افزار هایی از این دست طراحی نمایند. به طور مثال با تلفیق کلاس Scanner و همچنین Loop ها می توان برنامه ای طراحی کرد تا به طور مثال خواهر یا برادر ما به سادگی بتواند مثلاً در مثال بالا numberOne را خود برای نرم افزار تعریف کند و خروجی برنامه را ببیند. به عبارت دیگر به جای آن که عدد دو در دیگر اعداد ضرب شود، عدد دیگری همچون عدد هفت از طریق کیبورد وارد برنامه شده و حاصلضرب این عدد در دیگر اعداد نمایش داده خواهد شد.

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

آموزش برنامه نویسی جاوا - قسمت ۲۶: ایجاد یک شماره تصادفی در پروژه برادر بد شانس

در این جلسه قصد داریم تا نحوه به کار گیری کلاس Random در زبان برنامه نویسی جاوا را مورد بررسی قرار دهیم. در واقع در این آموزش علاوه بر نحوه تولید یک عدد تصادفی توسط کلاس Random به استفاده از مباحث if و همچنین Loop یی از جنس for هم خواهیم پرداخت.

در این جلسه هم همچون برخی جلسات گذشته نیاز به یک سناریو داریم:

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

شما هم سعی کنید با برادرتان دعوا نکنید و به جای آن به ادامه مطلب رفته و جاوای خودتان را قوی کنید...

پروژه ای جدید در محیط اکلیپس ایجاد می کنیم تحت عنوان Unlucky Brother 26st Session به معنی "برادر بد شانس جلسه بیست و ششم" ایجاد کرده سپس کلاسی تحت عنوان RandomNumber به معنی "شماره تصادفی" ایجاد می کنیم. اولین مرحله برای ایجاد این برنامه دسترسی به عددی تصادفی است.

برای همین منظور از کلاسی که در API جاوا توسط طراحان این زبان برنامه نویسی تحت عنوان Random گنجانده شده استفاده خواهیم کرد. در حقیقت نحوه به کار گیری این کلاس تا حدودی مشابه کلاس Scanner است که در آموزش های قبلی به تفصیل مورد بررسی قرار گرفته است. حال کد خود را به شکل زیر تکمیل می کنیم:


  1. public class RandomNumber {
  2. public static void main(String[] args) {
  3. Random randomNumber = new Random();
  4. }
  5. }

در کد فوق با نوشتن کلمه Random این کلاس را از API زبان برنامه نویسی جاوا فرا خواهیم خواند. حال بایستی مانند دیگر کلاس ها و یا متغیر ها نامی برای آن در نظر بگیریم که در این مثال نام randomNumber به معنی "شماره تصادفی" را در نظر می گیریم. پس از علامت مساوی کلید واژه new را نوشته و سپس مجدداً نام کلاس Random را می نویسیم. در واقع ما با این کار اقدام به ایجاد Instance یا نمونه ای از این کلاس در برنامه خود می کنیم. حال همانطور که مشاهده می شود دور دو واژه Random نقطه چین قرار گرفته است به این معنی که برای نرم افزارم اکلیپس ناشناخته هستند. برای رفع این مشکل همانند روشی که در آموزش های پیشین استفاده شد، نشانگر موس خود را روی یکی از آن ها قرار داده و پس از آنکه اکلیپس پنجره ای زرد رنگ باز کرد که حاوی تعدادی پیشنهاد برای رفع این مشکل بود گزینه Import ‘Random’(java.util) را انتخاب می کنیم:

92-04-25-j26-IMAGE 1.jpg

به محض اینکه روی این گزینه کلیک کنیم خطی از کد به شکل import java.util.Random; به اول برنامه اضافه خواهد شد. (لازم به ذکر است دو روش دیگر نیز برای وارد کردن یک کلاس به برنامه وجود دارد. روش اول به این شکل است که خط اول از کدی که در بالا مشاهده می شود را به صورت دستی وارد کنیم که این کار تا حدودی وقت گیر خواهد بود. راه دوم این است که از کلید های میانبر استفاده کنیم که برای این منظور می توان از ترکیب کلید های Ctrl + Shift + O استفاده کرد البته به خاطر داشته باشیم که احتمال دارد این کلید های میانبر در نسخه های متفاوت اکلیپس تغییر کرده باشند). اکنون کد خود را به شکل زیر تکمیل می کنیم:

  1. import java.util.Random;
  2.  
  3. public class RandomNumber {
  4. public static void main(String[] args) {
  5. Random randomNumber = new Random();
  6. randomNumber.nextInt();
  7. }
  8. }

حال همانطور که در کد فوق مشاهده می شود در خط بعدی نیاز است تا نوع داده ورودی این کلاس تصادفی را تعریف کنیم که در اینجا از متدی به اسم nextInt() استفاده خواهیم کردکه ایجاد کننده یک عدد صحیح است. حال برای آنکه بتوانیم روی برنامه خود تسلط بیشتری داشته باشیم می بایست یک Range یا طیفی از اعداد را برای برنامه خود مشخص کنیم که از میان آنها یک عدد به صورت تصادفی انتخاب گردد. برای همین منظور داخل پرانتز مقابل nextInt() عدد 101 را وارد می کنیم به این معنی که کامپیوتر یک عدد تصادفی از صفر تا صد را انتخاب خواهد کرد. در حقیقت علت اینکه عدد 101 را به عنوان Range تعریف کردیم این است که در این متد آخرین عدد که خود عدد 101 است جزو طیف محسوب نمی شود از این رو طیف ما در برگیرنده اعدادی از صفر تا صد خواهد بود. حال نیاز است تا دو متغیر از جنس int به نام هر دو برادر تعریف کنیم. در این مثال نام های hesamNumber و hadiNumber را در نظر می گیریم. تا اینجای کار کد ما به شکل زیر خواهد بود:

  1. import java.util.Random;
  2. public class RandomNumber {
  3. public static void main(String[] args) {
  4. Random randomNumber = new Random();
  5. randomNumber.nextInt(101);
  6. int hesamNumber;
  7. int hadiNumber;
  8. }
  9. }

حال همانطور که در آموزش های پیشین فرا گرفتیم، می بایست تا یک Loop از جنس for وارد برنامه خود کنیم. در واقع وظیفه ای که این Loop بر عهده دارد این است که اعداد تصادفی را که ما وارد آن می کنیم را بارها و بارها تکرار کند تا در نهایت عدد مرتبط به یکی از برادران به نقطه پایانی برسد و بازنده معلوم گردد. در این مرحله کد ما به شکل زیر خواهد بود:

  1. import java.util.Random;
  2. public class RandomNumber {
  3. public static void main(String[] args) {
  4. Random randomNumber = new Random();
  5. randomNumber.nextInt(101);
  6. int hesamNumber;
  7. int hadiNumber;
  8. for(){
  9.  
  10. }
  11. }
  12. }

همانطور که می دانیم داخل پرانتز مقابل for می بایست سه پارامتر قرار گیرد، به این شکل که پارامتر اول مقدار اولیه متغیرها است، پارامتر دوم نقطه پایانی متغیرهاست و پارامتر سوم تعیین کننده مقداری است که در هر بار Loop شدن می بایست به متغیر ها اضافه گردد. حال کد خود را به شکل زیر تکمیل می کنیم:

  1. import java.util.Random;
  2. public class RandomNumber {
  3. public static void main(String[] args) {
  4. Random randomNumber = new Random();
  5. randomNumber.nextInt(101);
  6. int hesamNumber;
  7. int hadiNumber;
  8. for (hesamNumber = randomNumber.nextInt(101), hadiNumber = randomNumber.nextInt(101)) {
  9. }
  10. }
  11. }

به طور خلاصه، عبارت hesamNumber = randomNumber.nextInt(101) به منزله نشان دادن نقطه آغازین متغیر است و از آنجا که می خواهیم این برنامه کلاً بر پایه شانس یا بهتر بگوییم بد شانسی باشد، تعیین مقدار اولیه متغیرهای مرتبط به هر دو برادر را به عهده کلاس Random می گذاریم. از همین رو Instance یا نمونه ای از کلاس Random را که قبلاً ایجاد کرده بودیم را به متغیر برادر اول نسبت می دهیم. از آنجا که در این برنامه ما دو متغیر داریم، پس نیاز است تا نقطه آغازین هر دو متغیر را در داخل for تعیین کنیم از این رو یک کاما پس از اولین متغیر قرار داده سپس نام متغیر دوم و همچنین مقدار اولیه آن را نیز مشخص می کنیم و در نهایت یک علامت ; قرار می دهیم. در این مرحله نوبت به نوشتن کدی مربوط به نقطه پایانی Loop می رسد که در اینجا ما عدد 1000 را در نظر می گیریم. برای این منظور کد خود را به شکل زیر تکمیل می کنیم:

  1. import java.util.Random;
  2. public class RandomNumber {
  3. public static void main(String[] args) {
  4. Random randomNumber = new Random();
  5. randomNumber.nextInt(101);
  6. int hesamNumber;
  7. int hadiNumber;
  8. for (hesamNumber = randomNumber.nextInt(101), hadiNumber = randomNumber.nextInt(101); hesamNumber <= 1000 || hadiNumber <= 1000;) {
  9. }
  10. }
  11. }

به طور خلاصه عبارت hesamNumber <= 1000 || hadiNumber <= 1000; به این معنی است که اگر Value مرتبط با متغیر ما تحت عنوان hesamNumber کوچکتر یا مساوی با 1000 بود و یا Value مرتبط با متغیر ما تحت عنوان hadiNumber کوچکتر یا مساوی با 1000 بود برنامه از Loop خارج شود(در واقع علامت || به معنی "یا" است). این قسمت از کد نیز همچون قسمت قبل با یک علامت ; به پایان می رسد. حال می بایست پارامتر سوم را تعریف کنیم که عبارت است از تعیین مقدار افزایشی هر متغیر در هر بار Loop شدن برنامه و برای این منظور کد فوق را به شکل زیر تکمیل می کنیم:

  1. import java.util.Random;
  2. public class RandomNumber {
  3. public static void main(String[] args) {
  4. Random randomNumber = new Random();
  5. randomNumber.nextInt(101);
  6. int hesamNumber;
  7. int hadiNumber;
  8. for (hesamNumber = randomNumber.nextInt(101), hadiNumber = randomNumber.nextInt(101); hesamNumber <= 1000 || hadiNumber <= 1000; hesamNumber += randomNumber.nextInt(11), hadiNumber += randomNumber.nextInt(11)) {
  9. }
  10. }
  11. }

به طور خلاصه، عبارت hesamNumber += randomNumber.nextInt(11) به این معنی است که در هر بار Loop شدن مقدار متغیر ما تحت عنوان hesamNumber به مقدار عددی کاملاً تصادفی از صفر تا 10 افزایش یابد. سپس یک علامت کاما قرار داده و مقداری که می بایست متغیر دوم ما هم در هر بار Loop شدن افزایش یابد را تعیین می کنیم که همانند متغیر پیشین می باشد(همانطور که پیش از این آموزش دادیم خود عدد 11 جزو اعداد محسوب نخواهد شد). تا اینجای کار کلیه شروطی که برنامه در حین اجرا می بایست از آن طبعیت کند را تعریف کرده ایم و اکنون می بایست به کامپیوتر دستور دهیم تا خروجی برنامه را روی صفحه مانیتور نمایش دهد. برای همین منظور کد فوق را به شکل زیر تکمیل می کنیم:

  1. import java.util.Random;
  2. public class RandomNumber {
  3. public static void main(String[] args) {
  4. Random randomNumber = new Random();
  5. randomNumber.nextInt(101);
  6. int hesamNumber;
  7. int hadiNumber;
  8. for (hesamNumber = randomNumber.nextInt(101), hadiNumber = randomNumber.nextInt(101); hesamNumber <= 1000 || hadiNumber <= 1000; hesamNumber += randomNumber.nextInt(11), hadiNumber += randomNumber.nextInt(11)) {
  9. System.out.println("Hesam` number is " + hesamNumber + " and "
  10. + "Hadi`s number is " + hadiNumber);
  11. }
  12. }
  13. }

در حقیقت هر آنچه در دستور System.out.println(); قرار گیرد، در پنجره Console به نمایش در خواهد آمد. حال ما می خواهیم نشان دهیم که شماره حسام ... است و شماره هادی ... است که برای همین منظور اولین عبارتی که می نویسیم Hesam`s number is است یعنی "شماره حسام هست..." سپس یک علامت + قرار داده و نام متغیر مرتبط با حسام را می نویسیم. تا اینجای کار عبارت مربوط به حسام تکمیل می شود. حال می خواهیم عبارت مربوط به هادی را نیز اضافه کنیم که برای این کار یک علامت + قرار داده و عبارت “ and “ را می نویسیم. اگر توجه کرده باشید هر دو طرف واژه and فضای خالی قرار داده ایم برای آنکه خروجی برنامه خوانا تر باشد. سپس یک علامت + دیگر قرار داده و عبارت Hadi`s number is به معنی "شماره هادی هست ..." به علاوه نام متغیر مرتبط با هادی را می نویسیم. اکنون زمان اجرای برنامه رسیده است که با Run کردن برنامه خروجی زیر را مشاهده خواهیم کرد:

92-04-25-j26-IMAGE 2.jpg

اگر به فلش قرمز رنگ داخل تصویر توجه کنیم، خواهیم فهمید که لیست بلندی از اعداد تصادفی توسط نرم افزار برای هر یک از دو برادر ایجاد شده است. نکته ای که در این برنامه از اهمیت بسزایی برخوردار است این است که به هر حال یکی از این دو برادر زودتر از دیگری به عدد 1000 خواهد رسید که همین مسئله فرد برنده و بازنده را مشخص خواهد کرد. در یک Run از برنامه که در تصویر فوق مشاهده می شود، هادی امتیاز کمتری نسبت به برادر خود کسب کرده است پس وی باید خرید نان را بر عهده گیرد. در حقیقت برنامه ما در اینجا تکمیل شده است اما برای آنکه خود برنامه نفر برنده را مشخص کند می توانیم از دستور if نیز کمک بگیریم. برای همین منظور کد فوق را به شکل زیر تکمیل می کنیم:

  1. import java.util.Random;
  2. public class RandomNumber {
  3. public static void main(String[] args) {
  4. Random randomNumber = new Random();
  5. randomNumber.nextInt(101);
  6. int hesamNumber;
  7. int hadiNumber;
  8. for (hesamNumber = randomNumber.nextInt(101), hadiNumber = randomNumber.nextInt(101); hesamNumber <= 1000 || hadiNumber <= 1000; hesamNumber += randomNumber.nextInt(11), hadiNumber += randomNumber.nextInt(11)) {
  9. System.out.println("Hesam` number is " + hesamNumber + " and "
  10. + "Hadi`s number is " + hadiNumber);
  11. }
  12. if (hesamNumber > hadiNumber) {
  13. System.out.println("Hesam won the game and Hadi has to buy it.");
  14. } else if (hesamNumber < hadiNumber) {
  15. System.out.println("Hadi won the game and Hesam has to buy it.");
  16. } else {
  17. System.out.println("Now they have to think about a third solution!");
  18. }
  19. }
  20. }

در واقع خارج از Block مربوط به Loop مرتبط با for عبارات شرطی if را خواهیم نوشت(علت آنکه این عبارات شرطی را خارج از Block مرتبط با for می نویسیم این است که می خواهیم از تکرار عبارات شرطی در هر بار Loop شدن خودداری کرده و صرفاً زمانیکه برنامه از Loop خارج شد آنها را به نمایش در آوریم). حال به بررسی تک تک عبارات شرطی می پردازیم. در عبارت اول به برنامه خود دستور داده ایم که اگر مقدار متغیر مرتبط با حسام بیشتر از مقدار متغیر هادی بود جمله Hesam won the game and Hadi has to buy it. را به معنی "حسام بازی را برد و هادی باید به خرید برود." به نمایش در آید. حال اگر این تنها شرط برنامه ما بود می بایست یک دستور else برای زمانیکه جواب به شرط فوق false بود تعریف کنیم اما از آنجا که ما یک شرط دیگر هم داریم از عبارت else if استفاده می کنیم و در آن تعیین می کنیم که اگر مقدار متغیر هادی بیش از مقدار متغیر حسام بود پس جمله Hadi won the game and Hesam has to but it. به معنی "هادی بازی را برد و حسام باید به خرید برود." می بایست روی صفحه مانیتور به نمایش در آید. یک فرض محال هم ممکن است اتفاق افتد و آن اینکه مقدار متغیر هر دو برادر معادل با یک عدد شود و نفر برنده و بازنده بازی مشخص نشود که در این صورت در دستور else از برنامه خواسته ایم که چنانچه جواب به شرط if معادل با false بود و همچنین اگر جواب به شرط else if معادل با false بود، دستور Now they have to think about a third solution! به معنی" حالا هر دو برادر می بایست به دنبال یک راه کار سومی بگردند!" اجرا خواهد شد. مجدد برنامه را اجرا می کنیم:

92-04-25-j26-IMAGE 3.jpg

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

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

آموزش برنامه نویسی جاوا - قسمت ۲۷: به کارگیری Array ها در پروژه دفترچه تلفن

پس از آشنایی به انواع Loop ها در قسمت های پیشین، در این آموزش قصد داریم تا به بررسی Array ها در زبان برنامه نویسی جاوا بپردازیم (در این آموزش از ترجمه کردن واژه Array خودداری می کنیم چرا که برای درک بهتر این مسئله، بهتر است آن را تحت عنوان Array بشناسیم). یکی از ساده ترین راه های ذخیره اطلاعات در زبان های برنامه نویسی استفاده از Variable ها است. حال فرض کنیم که تعدادی Variable داریم که از یک جنس یکسان هستند مثلاً همگی از جنس int می باشند. حال به جای آنکه به تعداد مواردی از Variable ها که می خواهیم در برنامه خود مورد استفاده قرار دهیم یک متغیر جدید تعریف می کنیم، به سادگی می توانیم کلیه متغیر های خود را در یک Array قرار دهیم. به عبارت دیگر یک Array به گروهی از متغیرها گفته می شود که دارای جنسی یکسان هستند. به طور خلاصه می توان Array ها را به شکل یک Variable دید که قادرند بیش از یک Value را در خود اختصاص دهند.

ادامه مطلب را از دست ندهید.

حال فرض کنیم که می خواهیم یک برنامه دفترچه تلفن بنویسیم که در آن بتوانیم به راحتی نام و شماره تلفن دوستان و آشنایان را در برنامه خود ذخیره کنیم(در این برنامه قصد داریم، برای کوتاه شدن توضیحات، فرض کنیم که ما فقط سه دوست داریم). حال اگر بخواهیم نام و شماره تلفن این سه دوست خود را در متغیرها ذخیره سازیم، مجبور خواهیم بود سه متغیر از جنس int برای ذخیره سازی شماره تلفن ها و همچنین سه کلاس از جنس String برای ذخیره سازی نام دوستان خود تعریف کنیم. اما با استفاده از Array ها خواهیم توانست هر سه شماره تلفن را در یک Array از جنس int و هر سه نام را در Array دیگری از جنس String ذخیره ساخته و کد خود را کوتاه تر و تمیز تر سازیم.

برای این منظور پروژه ای جدید در محیط برنامه نویسی اکلیپس تحت عنوان 27th Session به معنی "جلسه بیست و هفتم" ایجاد کرده و یک کلاس به نام Array در آن ایجاد می کنیم. همانطور که قبلاً توضیح داده شد، Comment های اضافی را از درون کد خود حذف می کنیم و شروع به برنامه نویسی می کنیم. همانطور که قبلا توضیح داده شد، برای ایجاد یک متغیر ما نیاز داریم تا نوع متغیر را نوشته، سپس نام در نظر گرفته شده برای آن و پس از قرار دادن علامت مساوی یک مقدار برای آن در نظر می گیریم و در نهایت یک علامت ; قرار می دهیم. به عبارت دیگر متغیر ما به شکل int number = 12; خواهد بود. نحوه ایجاد Array ها هم تا حدودی به همین نحو است اما با اعمال تغییراتی کوچک. به طور مثال، برای تبدیل یک متغیر به یک Array می بایست پس از نوع متغیر که در مثال فوق int است علامت [] را قرار دهیم. در واقع این علامت به کامپیوتر این دستور را صادر می کند که با یک Array طرف است. در نهایت برای اینکه یک Array کامل داشته باشیم، می بایست به نحو زیر عمل کنیم:


  1. public class Array {
  2. public static void main(String[] args) {
  3. int[] number = new int[3];
  4. }
  5. }

در این کد ما یک Array از جنس int تحت عنوان number به معنی "عدد" ایجاد کرده ایم. حال پس از علامت مساوی از کلید واژه new استفاده کرده ایم که به این معنی است که یک Array جدید برای ما ایجاد کن. حال مجدداً نوع متغیر را به همراه علامت [] نوشته و در انتها یک علامت ; قرار می دهیم. از آنجاکه ما سه دوست بیشتر نداریم، داخل علامت [] دوم عدد 3 را می نویسم. به طور خلاصه این Array سه داده از جنس عدد صحیح را در خود ذخیره خواهد ساخت. اگر خاطرمان باشد در آموزش پیشین زمانیکه از کلاس Random استفاده کردیم به موردی این چنین برخوردیم که در آن کلاس اگر عدد مثلاً 100 را به عنوان طیفی از اعداد تعریف کنیم که برنامه از آن میان یک عدد را به طور تصادفی بیرون بکشد، طیف ما از عدد صفر تا عدد نود و نه را شامل می شد. در مورد Array ها هم مسئله به همین صورت است چرا که در Array ها اولین جایگاه برای ذخیره داده به عدد صفر اختصاص داده می شود. حال ما سه عدد دوست داریم که شماره تلفن دوست اول در جایگاه صفر و شماره تلفن دوست دوم در جایگاه یک و در نهایت شماره تلفن دوست سوم در جایگاه دوم ذخیره خواهد شد. این مسئله جزو نکاتی است که در برنامه نویسی بسیار می بایست مورد توجه قرار گیرد. به طور خلاصه کد تکمیل شده ما به شکل زیر خواهد بود:

  1. public class Array {
  2. public static void main(String[] args) {
  3. int[] number = new int[3];
  4. number[0] = 91816122;
  5. number[1] = 91217945;
  6. number[2] = 91144423;
  7. }
  8. }

در کد فوق همانطور که مشاهده می شود به منظور اختصاص دادن Value به مواردی که در Array تعریف شده است، نام Array را به همراه جایگاه آن مثلا [0] نوشته و پس از علامت مساوی مقداری برای آن در نظر می گیریم و در نهایت یک علامت ; قرار می دهیم. حال قصد داریم تا نام سه دوست خود را در یک Array ذخیره سازیم. از آنجا که تعدادی کاراکتر پشت سرهم تشکیل یک string را می دهند و برای ذخیره سازی داده هایی از نوع string می بایست از کلاس String استفاده کنیم، از این رو یک Array دیگر از جنس String ایجاد می کنیم و کد خود را به شکل زیر تکمیل می کنیم:

  1. public class Array {
  2. public static void main(String[] args) {
  3. int[] number = new int[3];
  4. number[0] = 91816122;
  5. number[1] = 91217945;
  6. number[2] = 91144423;
  7.  
  8. String[] name = new String[3];
  9. name[0] = "Iman";
  10. name[1] = "Aria";
  11. name[2] = "Mohammad Ali";
  12. }
  13. }

همانطور که ملاحظه می شود، نوع ایجاد یک Array از جنس String نیز همانند int است که در بالای کد ایجاد کردیم فقط تنها تفاوتی که وجود دارد این است که برای ذخیره سازی مقادیر string از علامت “ “ استفاده کرده ایم. در این مرحله کد ما تکمیل شده است، فقط نیاز است تا اطلاعات را روی صفحه مانیتور به نمایش در آوریم از این رو کد فوق را به شکل زیر تکمیل می کنیم:

  1. public class Array {
  2. public static void main(String[] args) {
  3. int[] number = new int[3];
  4. number[0] = 91816122;
  5. number[1] = 91217945;
  6. number[2] = 91144423;
  7.  
  8. String[] name = new String[3];
  9. name[0] = "Iman";
  10. name[1] = "Aria";
  11. name[2] = "Mohammad Ali";
  12. System.out.println("My first friend is named " + name[0]
  13. + " and his phone number is " + number[0]);
  14. }
  15. }

در کد فوق تنها بخشی که اضافه شده است دستور System.out.println(); است که وظیفه آن نمایش اطلاعات روی صفحه مانیتور است. حال جمله My first friend is named به معنی "نام اولین دوست من هست" را نوشته سپس با استفاده از علامت + داده ای را که برای اولین جایگاه در Array مربوط به نام دوستان ایجاد کرده بودیم را اضافه می کنیم. سپس یک علامت + دیگر قرار داده و عبارت and his phone number is به معنی "و شماره تلفن او هست" را به جمله پیشین اضافه می کنیم(همانطور که قبلاً توضیح داده شد، برای ارسال جمله ای به خط بعد از دستور \n استفاده می کنیم). حال مجدداً یک علامت + قرار داده و داده مربوط به شماره تلفن اولین دوست را اضافه می کنیم. حال پس از اجرای برنامه خروجی زیر مشاهده خواهد شد:

920430-j27-IMAGE 1.jpg

برای آن که نام و شماره دو دوست دیگر را نیز به نمایش در آوریم، کد خود را به صورت زیر تکمیل می کنیم:

  1. public class Array {
  2. public static void main(String[] args) {
  3. int[] number = new int[3];
  4. number[0] = 91816122;
  5. number[1] = 91217945;
  6. number[2] = 91144423;
  7.  
  8. String[] name = new String[3];
  9. name[0] = "Iman";
  10. name[1] = "Aria";
  11. name[2] = "Mohammad Ali";
  12. System.out.println("My first friend is named " + name[0]
  13. + " \nand his phone number is " + number[0]);
  14. System.out.println("My first friend is named " + name[1]
  15. + " \nand his phone number is " + number[1]);
  16. System.out.println("My first friend is named " + name[2]
  17. + " \nand his phone number is " + number[2]);
  18. }
  19. }

پس از اجرای مجدد برنامه، خروجی برنامه همانند تصویر زیر خواهد بود:

920430-j27-IMAGE 2.jpg

در آموزش آتی به بحث پیرامون نحوه خلاصه نویسی Array ها، نحوه شمارش تعداد عناصر داخل یک Array و همچینن نحوه به کار گیری Array های چند بعدی بحث خواهیم کرد.

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

آموزش برنامه نویسی جاوا- قسمت ۲۸: به کارگیری Array های چند بعدی یا Multidimensional

همانطور که در آموزش قسمت بیست و هفتم توضیح داده شد، Array ها به منظور ذخیره سازی اطلاعاتی مورد استفاده قرار می گیرند که همگی به یک نوع متغیر اختصاص دارند. حال چنانچه تعداد Element ها یا همان مواردی که در یک Array قرار می گیرند خیلی زیاد نباشند می توان نحوه نوشتن Array را تغییر داد تا کد ما خلاصه تر گردد. در حقیقت روشی که در جلسه آموزشی بیست و هفتم توضیح داده شد برای مواردی کاربرد دارد که تعداد عناصر Array ها بسیار زیاد باشند مثلا 200 مورد.

ادامه مطلب را از دست ندهید.

به منظور خلاصه نویسی Array ها در ابتدا یک پروژه جدید تحت عنوان 28th Session به معنی جلسه "بیست و هشتم" ایجاد کرده و کلاسی با StuffToBuy به معنی "چیزهایی که بایستی خریداری شود" می گذاریم. سپس یک Array از جنس String در آن ایجاد می کنیم و نام آن را items به معنی "موارد" می گذاریم. حال کد ما می بایست به صورت زیر باشد:


  1. public class StuffToBuy {
  2. public static void main(String[] args) {
  3. String[] items = {};
  4. }
  5. }

همانطور که ملاحظه می شود در آموزش پیشین نحوه ساخت یک Array به این صورت بود که پس از علامت مساوی از کلید واژه new استفاده کرده سپس مجدداً نوع متغیر را نوشته و در داخل علامت [] تعداد Element هایی را نوشته که می خواهیم داشته باشیم. اما در اینجا از آنجا که می خواهیم عددی را تعریف نکنیم و مستقیماً نام Element ها یا عناصر تشکیل دهنده Array را وارد کنیم از علامت {} پس از مساوی استفاده می کنیم. حال فرض کنیم که نیاز داریم تا نان، پنیر، کره، چای، سیب زمینی، گوجه، پیاز، قهوه، دوغ و آب معدنی در لیست خرید ما باشد. برای این منظور کد فوق را به شکل زیر تکمیل می کنیم:

  1. public class StuffToBuy {
  2. public static void main(String[] args) {
  3. String[] items = {"Bread", "Cheese", "Butter", "Tea", "Potato",
  4. "Tomato", "Onion", "Coffe", "Yogurt Drink", "Mineral Water"};
  5. }
  6. }

در واقع از آنجاییکه عناصر تشکل دهنده Array ما از جنس string هستند، از اینرو نیاز است تا این عناصر را داخل علامت “ “ قرار دهیم و آنها را با یک کاما از یکدیگر جدا سازیم. حال چنانچه بخواهیم نام یکی از این عناصر را روی صفحه نمایش نشان دهیم صرفاً لازم است تا در دستور System.out,println(); نام Array را نوشته و در داخل علامت [] شماره مورد مد نظر را بنویسیم. به طور مثال در لیست فوق اگر بخواهیم واژه Butter به معنی کره را در پنجره Console به نمایش در آوریم، صرفاً نیاز است تا عبارت items[2] را در داخل دستور System.out,println(); بنویسیم(در واقع از آنجا که شمارش این عناصر از صفر شروع می شود، نیاز است تا عدد 2 را وارد کنیم و چنانچه عدد 3 را وارد نماییم، واژه Tea نمایش داده خواهد شد). حال کد تکمیل شده ما به شکل زیر خواهد بود:

  1. public class StuffToBuy {
  2. public static void main(String[] args) {
  3. String[] items = {"Bread", "Cheese", "Butter", "Tea", "Potato",
  4. "Tomato", "Onion", "Coffe", "Yogurt Drink", "Mineral Water"};
  5. System.out.println(items[2]);
  6. }
  7. }

پس از اجرای برنامه، واژه Butter در پنجره Console به نمایش در خواهد آمد:

920431-j28-IMAGE 1.jpg

اگر چه که تعداد عناصر ما ده عدد است، اما اگر بخواهیم مورد شماره ده که Mineral Water به معنی آب معدنی است است را روی صفحه به نمایش در آوریم، می بایست عدد 9 را داخل [] وارد نماییم. و این در صوتی است که اگر عدد 10 را وارد نماییم، برنامه در حین Compile شدن از ما ایراد خواهد گرفت و عبارت ArrayIndexOutOfBoundsException به معنی اینکه شماره وارد شده خارج ای محدوده تعریف شده است نمایش داده خواهد شد.

نحوه شمردن تعداد Element ها داخل یک Array

چنانچه بخواهیم تعداد عناصری را که از این طریق وارد برنامه خود کرده ایم را شمارش کنیم، از متدی به اسم length استفاده می کنیم. برای این منظور کد فوق را به شکل زیر بازنوسی خواهیم کرد:

  1. public class StuffToBuy {
  2. public static void main(String[] args) {
  3. String[] items = {"Bread", "Cheese", "Butter", "Tea", "Potato",
  4. "Tomato", "Onion", "Coffe", "Yogurt Drink", "Mineral Water"};
  5. System.out.println(items.length);
  6. }
  7. }

در واقع فقط نیاز است تا در دستور System.out.println(); نام Array را نوشته و متد lenght را ضمیمه آن نماییم. حال پس از اجرای برنامه، تعداد عناصر داخل Array ما که معادل با 10 مورد است نمایش داده خواهد شد:

920431-j28-IMAGE 2.jpg

نحوه ایجاد Multidimensional Arrays

به طور خلاصه یک Array برای ذخیره سازی داده ها در یک Dimension یا "بعد" استفاده می شوند. حال اگر بخواهیم که یک Array ایجاد کنیم که چند بعدی باشد به طور مثال Array یی که در برگیرنده ستون و ردیف یک جدول باشد، می بایست از Multidimensional Array ها یا Array های چند بعدی استفاده کنیم. مثالی که این گونه Array ها در آن کاربرد فراوانی دارد نمودارهایی با محور های x و y می باشد. برای روشن شدن این مسئله، یک کلاس جدید تحت عنوان MultidimensionalArray ایجاد می کنیم و به شکل زیر آن را تکمیل می کنیم:

  1. public class MultidimensionalArray {
  2. public static void main(String[] args) {
  3. int[] row = {};
  4. }
  5. }

در حقیقت این کد نشانگر یک Array تک بعدی یا عادی است. حال اگر بخواهیم آن را به یک Array چند بعدی تبدیل نماییم، می بایست آن را به شکل زیر تغییر دهیم:

  1. public class MultidimensionalArray {
  2. public static void main(String[] args) {
  3. int[][] row = {{},{}};
  4. }
  5. }

به عبارت دیگر تنها با اضافه کردن یک علامت [] دیگر پس از نوع Array و همچنین اضافه کردن دو جفت علامت {} دیگر داخل علامت {} که پس از علامت مساوی قرار دارد و مجزا کردن آنها از یکدیگر بوسیله یک کاما ما یک Array دو بعدی ایجاد خواهیم کرد. حال کد فوق را به شکل زیر با اعدادی دلخواه تکمیل می کنیم:

  1. public class MultidimensionalArray {
  2. public static void main(String[] args) {
  3. int[][] row = {{10, 20, 30}, {100, 200, 300}};
  4. }
  5. }

همانطور که مشاهده می شود، در Array دو بعدی فوق ما دو ردیف داریم که ردیف اول حاوی اعداد 10 و 20 و 30 است و ردیف دوم حاوی اعداد 100 و 200 و 300 است. حال نحوه فراخوانی یک عدد مد نظر از این Array دو بعدی به این شکل است که در کد زیر مشاهده می شود:

  1. public class MultidimensionalArray {
  2. public static void main(String[] args) {
  3. int[][] row = {{10, 20, 30}, {100, 200, 300}};
  4. System.out.println(row[0][1]);
  5. }
  6. }

در حقیقت در دستور System.out.println(); نام Array را نوشته و از آنجا که Array ما دو بعدی است پس دو جفت [] مقابل آن قرار می دهیم. همانطور که قبلاً توضیح داده شد شمارش Array ها از صفر آغاز می شود و در این مثال هم ما دو ردیف بیشتر نداریم ردیف اول که {10,20,30} است و ردیف دوم که {100,200,300} و از آنجا که شمارش در Array ها از صفر آغاز می شود پس عدد اختصاص داده شده به ردیف اول صفر خواهد بود و عدد اختصاص داده شده به ردیف دوم یک است. در ردیف اول ما سه Element یا عنصر داریم که عدد 10 جایگاه صفر را دارا است، عدد 20 جایگاه یک و در نهایت عدد 30 جایگاه دو را دارا است. حال اگر بخواهم از ردیف اول عدد دوم را در پنجره Console به نمایش در آوریم، صرفاً نیاز است تا در دستور System.out.println(); پارامتر row[0][1] را وارد کنیم. پس از اجرای برنامه خروجی زیر را خواهیم دید:

920431-j28-IMAGE 3.jpg

به نظر می رسد با توضیحات فوق کاملاً این مسئله روشن شده باشد. حال برای آن که تمرین دیگری انجام داده باشیم قصد داریم تا از ردیف دوم عدد آخر که عدد 300 است رابه نمایش در آوریم. از آنجا که عدد اختصاص داده شده به ردیف دوم در این Array عدد یک است و از آن جا که عدد اختصاص داده شده به آخرین عدد ردیف دوم عدد دو است، پس کد خود را به شکل زیر بازنویسی می کنیم:

  1. public class MultidimensionalArray {
  2. public static void main(String[] args) {
  3. int[][] row = {{10, 20, 30}, {100, 200, 300}};
  4. System.out.println(row[1][2]);
  5. }
  6. }

پس از اجرای برنامه خروجی زیر مشاهده خواهد شد:

920431-j28-IMAGE 4.jpg

در جلسه آموزشی آینده با نحوه Sort کردن یا مرتب کردن عناصر داخل Array ها آشنا خواهیم شد. لازم به ذکر است به منظور درک بهتر مطالب آموزشی جلسه آتی، آشنایی با مقدمات Array ها و هم چنین آشنایی به نحوه به کارگیری Loop ها ضروری است.

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

آموزش برنامه نویسی جاوا - قسمت ۲۹: مرتب کردن عناصر یک Array در پروژه

در این جلسه قصد داریم تا نحوه Sort کردن یا مرتب کردن Element ها یا عناصر تشکیل دهنده یک Array مورد بررسی قرار دهیم. برای این منظور نیاز است تا حتماً جلسات مربوط به Array ها و همچنین Loop ها مرور شده باشند.

به منظور درک بهتر فایده Sort کردن در برنامه نویسی موقعیتی را در نظر خواهیم گرفت که ممکن است در دنیای واقع اتفاق افتد. فرض کنیم که در تیم تهیه فیلم سینمایی  به عنوان مدیر آی تی مشغول به کار بودیم. کار فیلم برداری و مونتاژ به پایان رسیده و همکاران ما مشغول تهیه تیتراژ پایانی هستند. در واقع همکاران ما بر اساس روالی که در تیتراژ پایانی معمول است، می خواهند تا اسامی بازیگران فیلم را به ترتیب حروف الفبا بنویسند. برای این منظور از ما که یک برنامه نویس هستیم کمک می خواهند.

ادامه مطلب را از دست ندهید.

برای این کار یک پروژه جدید تعریف می کنیم تحت عنوان  29th Session به معنی " جلسه بیست و نهم" و همچنین کلاسی به اسم AlphabeticOrder به معنی "ترتیب الفبا" در آن ایجاد می کنیم. حال از آن جا که اسامی بازیگران به داده هایی از جنس string در زبان برنامه نویسی جاوا تبدیل خواهند شد، پس نیاز داریم تا یک Array از جنس کلاس String ایجاد کنیم. از آنجا که این فیلم شش بازیگر اصلی داشت، در Array یی که ایجاد می کنیم عدد شش را نیز وارد می کنیم: کد ما به شکل زیر خواهد بود:


  1. public class AlphabeticOrder {
  2. public static void main(String[] args) {
  3. String[] castNames = new String[6];
  4. }
  5. }

همانطور که در کد فوق ملاحظه می شود نام این Array را castNames به معنی "نام بازیگران" گذاشته ایم. حال تک تک بازیگران به را هر ترتیبی که بخواهیم در داخل Array خود تعریف می کنیم و کد ما به شکل زیر تکمیل خواهد شد:

  1. public class AlphabeticOrder {
  2. public static void main(String[] args) {
  3. String[] castNames = new String[6];
  4. castNames[0] = "Zareyee Merila";
  5. castNames[1] = "Hosseini Shahab";
  6. castNames[2] = "Bayat Sareh";
  7. castNames[3] = "Peyman Moadi";
  8. castNames[4] = "Hatami Leila";
  9. castNames[5] = "Farhadi Sarina";
  10. }
  11. }

همانطور که در کد فوق ملاحظه می شود اول نام خانوادگی بازیگران سپس نام آن ها وارد شده است چرا که می خواهیم در این مثال بر اساس نام خانوادگی اسامی بازیگران را Sort نماییم. در این مرحله از برنامه نویسی نیاز به یک Loop از جنس for داریم تا در هر بار Loop شدن یک عدد به لیست اضافه شده و سپس اسامی بازیگران البته بر اساس حروف الفبا یکی پس از دیگر نمایش داده شوند. از این رو، یک Loop از جنس for تعریف می کنیم و مقادیر آن را به شکل زیر تعریف می کنیم:

  1. public class AlphabeticOrder {
  2. public static void main(String[] args) {
  3. String[] castNames = new String[6];
  4. castNames[0] = "Zareyee Merila";
  5. castNames[1] = "Hosseini Shahab";
  6. castNames[2] = "Bayat Sareh";
  7. castNames[3] = "Peyman Moadi";
  8. castNames[4] = "Hatami Leila";
  9. castNames[5] = "Farhadi Sarina";
  10. for (int number = 0; number < 6; number++) {
  11. }
  12.  
  13. }
  14. }

در واقع در این Loop نقطه شروع را عدد صفر در نظر می گیریم و نقطه پایان را عدد شش و در هر بار Loop شدن یک واحد به عدد پیشین اضافه خواهد شد. حال می خواهیم تا خروجی برنامه را در پنچره Console به نمایش در آوریم، از این رو کد فوق را به شکل زیر تکمیل می کنیم:

  1. public class AlphabeticOrder {
  2. public static void main(String[] args) {
  3. String[] castNames = new String[6];
  4. castNames[0] = "Zareyee Merila";
  5. castNames[1] = "Hosseini Shahab";
  6. castNames[2] = "Bayat Sareh";
  7. castNames[3] = "Peyman Moadi";
  8. castNames[4] = "Hatami Leila";
  9. castNames[5] = "Farhadi Sarina";
  10. for (int number = 0; number < 6; number++) {
  11. System.out.print(number + ": " + castNames[number] + "\n");
  12. }
  13.  
  14. }
  15. }

در دستور System.out.println(); با نوشتن واژه number این دستور را به کامپیوتر می دهیم که عدد Loop که از صفر آغاز شده و در هر بار Loop شدن یک عدد به آن اضافه می شود نمایش داده شود که این به منزله شماره ردیف خواهد بود. پس از آن یک علامت : به همراه یک Space قرار می دهیم سپس نام Array خود که castNames است را می نویسیم که در هر بار Loop شدن یکی از Element های Array برنامه نیز به نمایش در آید. نکته ای که در اینجا می بایست مد نظر قرار داده شود این است که مقابل نام castNames که نام Array است می بایست در داخل علامت [] شماره عنصری که از Array که می خواهیم به نمایش در آید را نیز بنویسیم. به طور مثال اگر بخواهیم که نام شهاب حسینی به نمایش در آید می توانیم castNames[1] را فرا بخواهیم. سپس یک علامت \n قرار داده تا در هر بار Loop شدن به نوشتن کلمات به خط بعد انتقال یابد. اما از آنجا که می خواهیم به همان ترتیبی که Loop اجرا می شود عناصر داخل Array نمایش داده شوند، از اینرو به جای وارد کردن یک عدد نام Loop را که number می باشد را وارد می کنیم. به عبارت دیگر در Loop اول که Loop صفر است اولین عنصر که مریلا زارعی است نمایش داده شده که جایگاه آن هم صفر است و در Loop دوم که جایگاه آن یک است شهاب حسینی نمایش داده شده که جایگاه آن یک است و الی آخر. حال برنامه خود را اجرا می کنیم:

920503-29j-IMAGE 1.jpg

همانطور که ملاحظه می شود اسامی به همان ترتیبی که نوشته شده بودند روی صفحه مانیتور به نمایش در می آیند و از آنجاییکه اولین جایگاه در یک Array جایگاه صفر است، شماره ردیف ها نیز از صفر شروع می شود. اما ترتیب لیست فوق بر اساس حروف الفبا نیست. برای اینکار می بایست کد خود را به صورت زیر تکمیل کنیم:

  1. import java.util.Arrays;
  2. public class AlphabeticOrder {
  3. public static void main(String[] args) {
  4. String[] castNames = new String[6];
  5. castNames[0] = "Zareyee Merila";
  6. castNames[1] = "Hosseini Shahab";
  7. castNames[2] = "Bayat Sareh";
  8. castNames[3] = "Peyman Moadi";
  9. castNames[4] = "Hatami Leila";
  10. castNames[5] = "Farhadi Sarina";
  11. Arrays.sort(castNames);
  12. for (int number = 0; number < 6; number++) {
  13. System.out.print(number + ": " + castNames[number] + "\n");
  14. }
  15. }
  16. }

در این کد پیش از شروع for کلاسی تحت عنوان Arrays را به برنامه فرا خوانده ایم و پس از آن یک متد تحت عنوان sort() را نوشته ایم. در این مرحله از آنجا که ما قصد داریم تا یک کلاس ایجاد شده در API زبان برنامه نویسی جاوا را فرا بخوانیم، پس نیاز است تا این کلاس را به برنامه خود Import کنیم. برای اینکار همانطور که در آموزش های پیشین توضیح داده شد یا عبارت import java.util.Arrays; را به صورت دستی وارد می کنیم و یا نشانگر موس خود را روی خط چین دور واژه Arrays نگه داشته سپس گزینه Import را می زنیم و یا کلید های Ctrl و Shift و O را به صورت هم زمان می فشاریم و عملیات import کلاس Arrays صورت خواهد پذیرفت. حال برای آنکه به این متد دستور دهیم که چه چیزی را sort کند داخل پرانتز نام Array خود را می نویسیم. حال پیش از آن که برنامه وارد Loop شود، این متد اجرا شده، اسامی به ترتیب حروف الفبا در خواهند آمد سپس اطلاعات وارد Loop خواهند شد. مجدد برنامه را اجرا کرده و خروجی برنامه به شکل زیر خواهد بود:

920503-29j-IMAGE 2.jpg

همانطور که ملاحظه می شود، نام های خانوادگی بر اساس حروف الفبا مرتب شده اند(در این لیست چیزی که تا حدودی غیر طبیعی است این است که ردیف خانم ساره بیات ردیف صفر است و این در حالی است که در هیچ تیتراژ پایانی فیلمی اولین جایگاه به صفر اختصاص داده نمی شود و اسامی از جایگاه یک شروع می شوند. به هر حال امید است مفهوم sort به خوبی منتقل شده باشد). در حقیقت در زبان برنامه نویسی جاوا عملکرد متد sort به این شکل است که در مورد حروف الفبا آن ها را از A تا Z مرتب می کند و در مورد اعداد آن ها را از بزرگ به کوچک sort می کند. در قسمت آتی با نحوه جمع کردن Element های یک Array با یکدیگر آشنا خواهیم شد.

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

آموزش زبان برنامه نویسی جاوا- قسمت ۳۰: نحوه جمع کردن Element های یک Array با یکدیگر


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

برای این منظور ابتدا پروژه ای تحت عنوان 30th Session به معنی "جلسه سی ام" ایجاد کرده، سپس یک کلاس جدید تحت عنوان MonthlyPaymentAverage به معنی "میانگین درآمد ماهیانه" ایجاد می کنیم. اکنون یک Array از جنس int ایجاد کرده وکلیه ماه های سال را برای آن تعریف می کنیم. در این مرحله کد ما می بایست به شکل زیر باشد:

  1. public class MonthlyPaymentAverage {
  2. public static void main(String[] args) {
  3. int[] monthNames = new int[12];
  4. monthNames[0] = 500000;
  5. monthNames[1] = 1500000;
  6. monthNames[2] = 1300000;
  7. monthNames[3] = 1700000;
  8. monthNames[4] = 2500000;
  9. monthNames[5] = 500000;
  10. monthNames[6] = 1500000;
  11. monthNames[7] = 1000000;
  12. monthNames[8] = 750000;
  13. monthNames[9] = 500000;
  14. monthNames[10] = 1400000;
  15. monthNames[11] = 1100000;
  16. }
  17. }

در کد فوق تعریف کرده ایم که در Array ما دوازده Element جای گیرد. سپس برای هر یک از ماه ها یک درآمد ماهیانه در نظر گرفته ایم(اگر توجه کرده باشیم می بینیم که اولین ماه که فروردین باشد جایگاه صفر را به خود اختصاص داده است). حال یک متغیر از جنس int ایجاد می کنیم و نام آن را total به معنی "کل" می گذاریم. مقدار در نظر گرفته شده برای این متغیر صفر خواهد بود. سپس یک Loop از جنس for ایجاد می کنیم چرا که می خواهیم از طریق Loop در هر دوازده ماه سال گردش کرده تا مقدار آن ها را گرفته سپس میانگین آن ها را محاسبه کنیم. یک متغیر از جنس int داخل for ایجاد کرده و نام آن را counter به معنی "شمارنده" می گذاریم و Value اولیه آن را صفر می گذاریم چرا که اولین گزینه در Array یی که در بالا ایجاد شده است از صفر شروع می شود. به عبارت دیگر int counter = 0; به منزله نقطه آغازین می باشد. سپس نقطه پایانی را کوچکتر از عدد 12 می گذاریم زیرا از آن جا که ما 12 ماه در سال داریم پس می خواهیم که این Loop یازده بار گردش کند و در نهایت به for دستور می دهیم که در هر بار Loop شدن یک واحد به متغیر counter اضافه کند. در این مرحله کد ما می بایست به شکل زیر باشد(علت آنکه به Loop خود دستور می دهیم که یازده بار گردش کند این است که یازده بار برای ماه های یک تا یازده به علاوه یک بار برای ماه شماره صفر):

  1. public class MonthlyPaymentAverage {
  2. public static void main(String[] args) {
  3. int[] monthNames = new int[12];
  4. monthNames[0] = 500000;
  5. monthNames[1] = 1500000;
  6. monthNames[2] = 1300000;
  7. monthNames[3] = 1700000;
  8. monthNames[4] = 2500000;
  9. monthNames[5] = 500000;
  10. monthNames[6] = 1500000;
  11. monthNames[7] = 1000000;
  12. monthNames[8] = 750000;
  13. monthNames[9] = 500000;
  14. monthNames[10] = 1400000;
  15. monthNames[11] = 1100000;
  16.  
  17. int total = 0;
  18. for (int counter = 0; counter < 12; counter++) {
  19. }
  20. }
  21. }

حال می خواهیم به Loop خود دستور می دهیم که در هر بار Loop شدن مقدار یکی از ماه های سال را گرفته و آن را به متغیرtotal اختصاص دهد. برای این منظور نام متغیر total را نوشته و یک علامت مساوی مقابل آن قرار می دهیم. در واقع با این کار می خواهیم مقدار جدید را به این متغیر اختصاص دهیم. حال این مقدار جدید monthNames خواهد بود که مقابل آن یک علامت [ ] نیز قرار گرفته است. در واقع عددی که داخل علامت [ ] قرار می گیرد حاکی از ماهی است که قرار است مقدار اختصاص داده شده به آن به متغیر total اختصاص یابد. برای اینکه این کار به صورت خودکار صورت گیرد داخل علامت [ ] به جای این که یک عدد از صفر تا یازده بنویسیم که کل ماه ها را شامل شود، نام متغیری که در for ایجاد کردیم را خواهیم نوشت چرا این متغیر نیز از صفر شروع شده و یازده بار نیز تکرار خواهد شد. کد ما به شکل زیر تکمیل خواهد شد:

  1. public class MonthlyPaymentAverage {
  2. public static void main(String[] args) {
  3. int[] monthNames = new int[12];
  4. monthNames[0] = 500000;
  5. monthNames[1] = 1500000;
  6. monthNames[2] = 1300000;
  7. monthNames[3] = 1700000;
  8. monthNames[4] = 2500000;
  9. monthNames[5] = 500000;
  10. monthNames[6] = 1500000;
  11. monthNames[7] = 1000000;
  12. monthNames[8] = 750000;
  13. monthNames[9] = 500000;
  14. monthNames[10] = 1400000;
  15. monthNames[11] = 1100000;
  16.  
  17. int total = 0;
  18. for (int counter = 0; counter < 12; counter++) {
  19. total = monthNames[counter];
  20. }
  21. }
  22. }

نکته ای که در اینجا می بایست مد نظر قرار داده شود این است که عبارت total = monthNames[counter]; حاکی از آن است که کامپیوتر می بایست مقدار اختصاص داده شده به متغیر total را معادل با مقدار Array قرار دهد. اما چیزی که ما از برنامه خود می خواهیم این است که این مقادیر با یکدیگر جمع شوند. از این رو یک علامت + قبل از علامت مساوی قرار می دهیم. در واقع با این کار در هر بار Loop شدن مقدار اختصاص داده شده به همه Element های موجود در Array به متغیر total اضافه می شود. حال برای آنکه خروجی برنامه روی صفحه مانیتور به نمایش در آید، کد خود را به شکل زیر تکمیل می کنیم:

  1. public class MonthlyPaymentAverage {
  2. public static void main(String[] args) {
  3. int[] monthNames = new int[12];
  4. monthNames[0] = 500000;
  5. monthNames[1] = 1500000;
  6. monthNames[2] = 1300000;
  7. monthNames[3] = 1700000;
  8. monthNames[4] = 2500000;
  9. monthNames[5] = 500000;
  10. monthNames[6] = 1500000;
  11. monthNames[7] = 1000000;
  12. monthNames[8] = 750000;
  13. monthNames[9] = 500000;
  14. monthNames[10] = 1400000;
  15. monthNames[11] = 1100000;
  16.  
  17. int total = 0;
  18. for (int counter = 0; counter < 12; counter++) {
  19. total += monthNames[counter];
  20. }
  21. System.out.println(total);
  22. }
  23. }

با استفاده از دستور System.out.println(); و قرار دادن نام متغیر total در آن، جمع کل درآمد های یک سال روی صفحه مانیتور به نمایش در خواهد آمد. خروجی برنامه به شکل زیر خواهد بود:

920510-j30-IMAGE 1.jpg

حال نیاز داریم تا این عدد را بر عدد 12 تقسیم کنیم تا میانگین درآمد هر ماه محاسبه شود. برای این منظور کد خود را به شکل زیر تکمیل می کنیم:

  1. public class MonthlyPaymentAverage {
  2. public static void main(String[] args) {
  3. int[] monthNames = new int[12];
  4. monthNames[0] = 500000;
  5. monthNames[1] = 1500000;
  6. monthNames[2] = 1300000;
  7. monthNames[3] = 1700000;
  8. monthNames[4] = 2500000;
  9. monthNames[5] = 500000;
  10. monthNames[6] = 1500000;
  11. monthNames[7] = 1000000;
  12. monthNames[8] = 750000;
  13. monthNames[9] = 500000;
  14. monthNames[10] = 1400000;
  15. monthNames[11] = 1100000;
  16.  
  17. int total = 0;
  18. for (int counter = 0; counter < 12; counter++) {
  19. total += monthNames[counter];
  20. }
  21. int avarageIncome = total / 12;
  22. System.out.println("Your avarage income is " + avarageIncome);
  23.  
  24. }
  25. }

در کد فوق یک متغیر از جنس int به نام avarageIncome به معنای "میانگین درآمد" تعریف کرده ایم و مقدار آن را معادل با مقدار متغیر total تقسیم بر تعداد ماه های یک سال قرار داده ایم. سپس در دستور System.out.println(); عبارت Your average income is به معنای "میانگین درآمد ماهیانه شما معادل است با" را نوشته و پس از قرار دادن یک علامت + نام متغیری که میانگین درآمد ماهیانه را محاسبه کرده است را می نویسیم. پس از اجرای برنامه خروجی زیر مشاهده خواهد شد:

920510-j30-IMAGE 2.jpg

اگر خاطرمان باشد در آموزش بیست و دوم با Loop یی از جنس for آشنا شدیم که این نوع Loop به منزله شکل ساده ای از for می باشد. اکنون که با مفهوم Array ها آشنا شده ایم به راحتی می توانیم شکل جدیدی از for ها را تحت عنوان Enhanced for Loop را مورد بررسی قرار دهیم(ترجیح این است که کمتر دست به ترجمه اصطلاحات تخصصی برنامه نویسی بزنیم اما برای روشن تر شدن تفاوت مابین for Loop و Enhanced for Loop می توان مورد دوم را به "یک Loop پیشرفته از جنس for " ترجمه کرد). به طور کلی می توان گفت که Enhanced for Loop در جاوای نسخه 5.0 معرفی شد و هدف از طراحی آن ساده سازی به کار گیری for بود. از سوی دیگر با توجه به مثال به کار گرفته شده در این آموزش، اگر ما از Enhanced for Loop استفاده می کردیم دیگر نیازی به به کار گیری از سومین پارامتر داخل for که همان مقدار افزایشی در هر بار Loop شدن است نخواهد بود. برای روشن تر شدن این مطلب کلاس جدیدی تحت عنوان EnhacedForLoop در پروژه فعلی خود می سازیم. حال می بایست کلاسی به شکل زیر داشته باشیم:

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

اکنون نیاز است تا یک Array در کلاس خود ایجاد کنیم، برای این منظور کد فوق را به شکل زیر تکمیل می کنیم:

  1. public class EnhancedForLoop {
  2.  
  3. public static void main(String[] args) {
  4. int numbers[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  5.  
  6. }
  7. }

همانطور که ملاحظه می شود یک Array از جنس عدد صحیح تحت عنوان numbers به معنی "اعداد" ساخته و مقدار آن را اعداد 1 الی 10 قرار داده ایم. حال قصد داریم تا با استفاده از یک Enhanced for Loop مقادیر این Array را یکی پس از دیگری نشان دهیم. برای این منظور کد فوق را به شکل زیر تکمیل می کنیم:

  1. public class EnhancedForLoop {
  2. public static void main(String[] args) {
  3. int numbers[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  4. for (int total : numbers) {
  5. System.out.println(total);
  6. }
  7. }
  8. }
  9.  

به طور خلاصه می توان گفت که ساختار یک Enhanced for Loop همانند یک for عادی است با این تفاوت که به جای آنکه سه پارامتر را داخل پرانتز for بنویسیم به یک پارامتر اکتفا کرده سپس بعد از آن یک علامت : قرار داده و در نهایت نام Array یی که می خواهیم Loop شود را می نویسیم. در مثال فوق پارامتر در نظر گرفته شده برای for ما یک متغیر از جنس int تحت عنوان total به معنی "کل" است که مقدار آن برابر با نام Array یی است تحت عنوان numbers که پیش از این ایجاد کردیم. حال برنامه را اجرا می کنیم:

IMAGE 3_n.jpg

همانطور که در تصویر فوق ملاحظه می شود به سهولت توانستیم اقدام به ایجاد یک Loop پیشرفته با نوشتن کد کمتری نماییم. پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم: 1. چرا زمانیکه یک Array ایجاد کردیم عدد 12 را برای آن در نظر گرفتیم ولی زمانیکه اقدام به نوشتن Elemtent های آن Array کردیم آخرین جایگاه به عدد 11 اختصاص داده شد؟ 2. منظور از Enhanced for Loop در زبان برنامه نویسی جاوا چیست؟ در آموزش سی و یکم با نحوه ایجاد دو کلاس متفاوت و ساخت یک Object از روی یکی از کلاس ها و فرا خواندن آن در کلاسی دیگر آشنا خواهیم شد. در واقع در این آموزش اولین شیئ خود در یک زبان برنامه نویسی شیئ گرا همچون جاوا را ایجاد خواهیم کرد.

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

آموزش زبان برنامه نویسی جاوا - قسمت ۳۱: ساخت اولین شیئ در جاوا


در دنیای واقعی یک شیئ جدای از دیگر اشیاء می تواند وجود داشته باشد، با دیگر اشیاء تعامل داشته باشد و حتی چند شیئ با یکدیگر ادغام شده تا شیئی جدیدی را بوجود آورند. در واقع قسمت سی و یکم از آموزش زبان برنامه نویسی جاوا به منزله شروع کار با Object ها یا همان اشیاء در این زبان برنامه نویسی خواهد بود. از اینجای آموزش به بعد خواهیم دید که چه طور می توان یک Object با خصوصیات منحصر به فردی ایجاد کرده و همچنین خواهیم دید که به چه نحوی می توان آن شیئ را در دیگر جاهای برنامه خود مورد استفاده قرار داد.

در حقیقت اگر یک برنامه نوشته شده در جاوا را به منزله تعدادی Object در نظر بگیریم که در کنار یکدیگر قرار گرفته اند تا یک Object بزرگ تر از خود را که کار خاصی را می تواند انجام دهد بسازد(یک برنامه)، به سهولت خواهیم توانست Object ها را در یک زبان برنامه نوسی شیئ گرا درک کنیم. در واقع با ساخت یک شیئ در برنامه خود، خواهیم توانست آن شیئ را به هر تعداد دفعه که بخواهیم مورد استفاده قرار دهیم و یا حتی چنانچه نیاز به تغییری در یکی از Attribute ها یا همان خصوصیات شیئ خاص داشته باشیم، صرفاً با اعمال تغییر در آن شیئ به خصوص تغییر اعمال شده در کل برنامه لحاظ خواهد شد. از سوی دیگر با ایجاد Object ها در یک برنامه کامپیوتری امکان Debug کردن یا مشکل یابی نیز برای ما راحت تر خواهد شد چرا که بجای درگیر کردن خود با کل پروژه، صرفاً می توانیم Object یی که به آن مشکوک هستیم را Debug کنیم.

در حقیقت یک شیئ در زبان برنامه نویسی شیئ گرا دارای دو چیز تحت عنوان Attribute و Behavior می باشد. به طور خلاصه Attribute ها عبارتند از ویژگی هایی که یک شیئ را از شیئ دیگری در برنامه متفاوت می سازند. منظور از Behavior ها همان کارهایی است که یک Object می تواند انجام دهد(به منظور آشنایی بیشتر با شیئ گرایی در زبان های برنامه نویسی، به آموزش سوم مراجعه نمایید). در زبان برنامه نویسی جاوا Object ها با استفاده از یک Class ایجاد می شوند. در حقیقت یک Class در برگیرنده کلیه Attribute ها و Behavior هایی است که یک Object خواهد داشت.

اکنون نیاز است پروژه ای تحت عنوان OOP به معنی "برنامه نویسی شیئ گرایی" ایجاد می کنیم سپس کلاسی به نام MyClass در آن می سازیم. در این مرحله کد ما می بایست به شکل زیر باشد:

  1. public class MyClass {
  2.  
  3. }

نام این کلاس MyClass به معنی "کلاس من" می باشد. حال اگر یک Object از روی این کلاس ایجاد کنیم، آن Object هیچ کاری برای ما نخواهد کرد زیرا که دارای هیچ گونه Attribute و یا Behavior نمی باشد. معنی لغوی واژه public معادل است با "عمومی" و یا "همگانی" و در زبان برنامه نویسی جاوا نیز معنی این کلید واژه چیزی در حد همین معانی است. با قرار دادن کلید واژه public قبل از نام یک کلاس و یا حتی متد، این دستور را به کامپیوتر می دهیم که این کلاس یا متد قابل دسترسی توسط دیگر بخش های برنامه نیز خواهد بود(در آموزش سی و ششم با دیگر سطوح کنترل همچون private و protected نیز آشنا خواهیم شد). حال نیاز داریم تا یک Attribute برای شیئ خود تعریف کنیم. این کار را می توان از طریق انواع متغیرها که در جلسه آموزشی پنجم مورد بررسی قرار گرفتند انجام داد. از این رو، یک متغیر از جنس int در کلاس خود به اسم number به معنی "شماره" ایجاد کرده و Value اختصاص داده شده به آن را معادل با 1 در نظر می گیریم. حال نوبت به ایجاد یک Behavior برای کلاس خود می رسد و برای همین منظور از یک متد استفاده خواهیم کرد. به طور خلاصه وظیفه Method ها انجام یکسری کارها است که به آن ها محول می شود و در این برنامه وظیفه متدی که ما می سازیم این است که روی صفحه مانیتور جمله ای را به نمایش در آورد. متد ما به شکل زیر خواهد بود:

  1. public void showSomething() {
  2.  
  3.  
  4. }

در واقع با قرار دادن کلید واژه public قبل از نام متد این دستور را به برنامه خود می دهیم که این متد از هر کجای برنامه قابل دسترس خواهد بود. کلید واژه void به این معنی است که این متد از یک سو قرار است دستوری انجام دهد و از سوی دیگر این متد قرار نیست که هیچ گونه Data یا داده ای را بازگرداند. به عبارت دیگر این متد return نخواهد داشت(در آموزش سی و نهم با مبحث return به طور مفصل آشنا خواهیم شد). سپس نام متد تحت عنوان showSomething با معنی "چیزی را نشان بده" قرار می دهیم. نکته ای که برنامه نویسان کل دنیا در نام گذاری متد ها همواره مد نظر دارند این است که این نام گذاری می بایست با یک فعل شروع شود چرا که وظیفه اصلی متد های انجام یکسری کار است پس بهتر است که نحوه نامگذاری آن ها هم به نحوی باشد که گویای وظیفه شان باشد. در این مثال از آنجا که این متد قرار است متنی را روی صفحه مانیتور به نمایش در آورد، پس نام آن را نیز با واژه show به معنی "نشان دادن" آغاز می کنیم. پس از نام متد علامت () را قرار داده سپس علامت { } را قرار می دهیم(هر کاری که متدها قرار است انجام دهند می بایست مابین دو علامت { } قرا گیرند و چنانچه نیاز است متد دارای Attribute های اضافی باشد می بایست داخل ( ) قرار گیرند که تحت عنوان پارامترهای آن متد شناخته می شوند). حال داخل دو علامت { } دستوری را می نویسیم که جمله "این اولین متد ساخت من است" را روی صفحه مانیتور به نمایش در آورد. در این مرحله کد ما به شکل زیر تکمیل خواهد شد:

  1. public class MyClass {
  2. int number = 1;
  3. public void showSomething() {
  4. System.out.println("This is my method " + number + " created by me.");
  5. }
  6. }

در واقع دستوری که داخل System.out.println(); قرار گرفته است در وهله اول عبارت This is my method را روی صفحه مانیتور نوشته سپس مقدار متغیر برنامه تحت عنوان number را به آن اضافه کرده و در نهایت عبارت created by me. را به آخر string اضافه می کند. حال در محیط برنامه نویسی اکلیپس دکمه Run را برای اجرای برنامه می زنیم و خروجی برنامه همانند تصویر زیر خواهد بود:

920516-j31-IMAGE 1.jpg

ظاهراً برنامه ما با مشکلی مواجه می باشد چرا که اکلیپس از اجرای برنامه خودداری کرده و از برنامه ما خطا می گیرد. عبارتی که در تصویر مشاهده می شود حاکی از آن است که "کلاس ما دارای یک نقطه شروع نمی باشد". همانطورکه قبلا هم توضیح داده شد، یک برنامه جاوا برای آن بتواند اجرا شود نیاز به یک متد از جنس main دارد که در قسمت زیر قابل مشاهده است:

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

در واقع هرآنچه که در این متد قرار گیرد، به محض اجرای برنامه فرا خوانده خواهد شد. تا این جای کار ما یک کلاس ایجاد کرده ایم که می توانیم از روی آن یک Object یا شیئ ایجاد کنیم. برای این منظور نیاز داریم تا یک کلاس جدید ایجاد کرده که به منزله نقطه آغازین برنامه ما خواهد بود و در کلاس جدید خود از روی کلاس MyClass یک شیئ جدید ایجاد کرده و مورد استفاده قرار دهیم. برای ایجاد یک کلاس جدید همانند تصویر زیر عمل می کنیم:

920516-j31-IMAGE 2.jpg

در این تصویر فلش قرمز رنگ نشان دهنده نام پروژه ای است که در ابتدای هر آموزش ایجاد می کنیم که در این آموزش نام OOP به معنی "برنامه نویسی شیئ گرایی" در نظر گرفته شده است. فلش سبز رنگ نشانگر پکیجی است که در حین ایجاد یک کلاس جدید می توانیم ایجاد کنیم. به خاطر داشته باشیم که وظیفه هر پکیج این است که به ما کمک کند تا کلاس هایی را که نیاز است تا در یک گروه باشند را در کنار یکدیگر قرار دهیم. حال اگر در حین ساخت یک کلاس نام پکیجی در نظر گرفته نشود، اکلیپس به طور خودکار این کار را تحت عنوان default package به معنی "پکیج پیش فرض" انجام خواهد داد. در این مرحله روی نام پیکج کلیک راست کرده و از پنجره ای که باز می شود گزینه New را انتخاب کرده و از پنجره دوم گزینه Class را انتخاب می کنیم که در تصویر فوق با فلش آبی رنگ نشان داده شده است.(به منظور ساخت یک کلاس جدید از منوی File می توان گزینه New سپس گزینه Class را انتخاب کرد). حال نامی که برای کلاس خود در نظر می گیریم می تواند MySecondClass به معنی "کلاس دوم من" باشد. سپس پیش از زدن دکمه Finish گزینه public static void main(String[] args) را تیک می زنیم. فایده این کار این است که دیگر نیازی نیست تا متد main را به طور دستی وارد کلاس جدید خود کنیم. پس از ایجاد کلاس جدید، کلاس به طور خودکار در پنجره ای جدید باز شده کد داخل آن به شکل زیر خواهد بود:

  1. public class MySecondClass {
  2. /**
  3. * @param args
  4. */
  5. public static void main(String[] args) {
  6. // TODO Auto-generated method stub
  7. }
  8. }

همانطور که قبلا توضیح داده شده است، کلیه Comment ها از داخل کد قابل حذف بوده و هیچ تاثیری در فرایند اجرای برنامه نخواهند داشت. این کلاس جدیدی که ایجاد کردیم بر خلاف کلاس اول خود، این قابلیت را دارا است که هر آنچه در آن قرار گیرد را اجرا کند چرا که داخل آن متد main گنجانده شده است. حال می خواهیم تا یک Object از روی کلاس قبلی خود در این کلاس ایجاد کنیم. برای این منظور کد خود را به شکل زیر تکمیل می کنیم:

  1. public class MySecondClass {
  2.  
  3. public static void main(String[] args) {
  4. MyClass newObject = new MyClass();
  5. }
  6. }

برای این کار نام کلاس قبلی خود را نوشته سپس برای این Object یی که می خواهیم بسازیم یک نام می بایست در نظر بگیریم. نامی که در اینجا می توان در نظر گرفت newObject به معنی "شیئ جدید " می باشد(لازم به ذکر است که هر نامی برای این شیئ می توان در نظر گرفت). سپس یک علامت مساوی قرار داده و از آنجا که قرار است یک شیئ جدید ایجاد کنیم از کلید واژه new استفاده خواهیم کرد و در نهایت مجدداً نام کلاسی که می خواهیم از روی آن یک شیئ درست کنیم را نوشته و یک علامت (); هم در انتهای آن قرار می دهیم. اما برای آنکه این شیئ ساخته شده را بتوانیم مورد استفاده قرار دهیم، می بایست نام Object یی که ساخته ایم را نوشته سپس بعد از آن یک نقطه قرار داده و در نهایت نام متدی که در کلاس قبلی ایجاد کرده بودیم را بنویسیم که در این صورت کد ما به شکل زیر در خواهد آمد(به عبارت دیگر این متد داخل کلاس است که می توان کاری مثل نمایش یک متن را عملی سازد که بدون فرا خواندن این متد شیئ ما هیچ کاری نخواد کرد):

  1. public class MySecondClass {
  2.  
  3. public static void main(String[] args) {
  4. MyClass newObject = new MyClass();
  5. newObject.showSomething();
  6. }
  7. }

تا اینجای کار ما توانسته ایم با موفقیت یک شیئ جدید بسازیم که کلیه Attribute ها و Behavior های خود را از کلاس MyClass به ارث خواهد برد. در این آموزش ما توانستیم یک Object جدید ایجاد کرده که در صورت اجرای برنامه، خروجی آن به شکل زیر خواهد بود:

920516-j31-IMAGE 3.jpg

حال اگر به Class اول خود بازگردیم و تغییری در متد آن ایجاد کنیم، این تغییر بلافاصله در Object یی که از روی آن کلاس ایجاد کردیم اعمال خواهد شد. به طور مثال عبارت داخل دستور System.out.println(); که در کلاس MyClass قرار دارد را به عبارت This is a change! به معنی"این یک تغییر است" تبدیل می کنیم. حال پس از Save کردن این تغییر اعمال شده مجدداً به Class دوم رفته و برنامه را اجرا می کنیم:

  1. public class MyClass {
  2. int number = 1;
  3. public void showSomething() {
  4. System.out.println("This is a change!");
  5. }
  6. }

خروجی برنامه به شکل زیر خواهد بود:

920516-j31-IMAGE 4.jpg

مشاهده می کنیم که به چه راحتی می توان در زبان برنامه نویسی جاوا یک Object ایجاد کرده و Attribute ها و Behavior های مرتبط با آن را در لحظه تغییر داد و تغییرات لحاظ شده را در کل برنامه خود دید.

چهارشنبه 2 بهمن 1392  11:45 AM
تشکرات از این پست
دسترسی سریع به انجمن ها