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

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

آموزش برنامه نویسی جاوا قسمت ۱۶: چگونگی قرار گرفتن چندین شرط در کنار یکدیگر
شنبه 28 دی 1392  2:55 PM

 

برای شروع این آموزش نیاز داریم تا پروژه ای تحت عنوان 16th Session به معنی "جلسه شانزدهم" ایجاد کرده سپس کلاسی با نام NestedIfStatement در آن ایجاد کنیم(در واقع هدف از انتخاب این نام صرفاً مرتبط بودن با موضوع آموزش است). حال برای درک بهتر موضوع آموزش این بخش نیاز به یک سناریو داریم".

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


برای این منظور نیاز داریم تا دو متغیر یکی برای IQ و دیگری برای معدل ترم قبل ایجاد کنیم ولی از آنجا که ممکن است مقادیر این متغیرها رند نباشند از متغیری از جنس double استفاده می کنیم که می تواند اعداد اعشاری را در خود جای دهد(لازم به ذکر است که از متغیری از جنس float هم می توان برای اعداد اعشاری استفاده کرد اما نکته اینجا است که دقت متغیر double بیشتر است). برای شروع کار کدی به شکل زیر خواهیم داشت:


  1. public class NestedIfStatement {
  2. public static void main(String[] args) {
  3. double intelligenceQuotient = 100;
  4. double termMean = 17.3;
  5. }
  6. }

در کد فوق متغیر اول تحت عنوان intelligenceQuotient دارای مقدار 100 بوده و متغیر دوم تحت عنوان termMean دارای مقداری معادل با 17.3 می باشد(در حقیقت واژه IQ مخفف واژگان Intelligence Quotient به معنی "میزان هوش" بوده و نام termMean از واژگان term به معنی "ترم" و mean به معنی "میانگین" می باشد). حال کد خود را به شکل زیر تکمیل می کنیم:

  1. public class NestedIfStatement {
  2. public static void main(String[] args) {
  3. double intelligenceQuotient = 100;
  4. double termMean = 17.3;
  5. if (intelligenceQuotient > 110 && termMean > 18) {
  6. System.out.println("You have 30 percent discount.");
  7. } else if (intelligenceQuotient > 100 && termMean > 17) {
  8. System.out.println("You have 20 percent discount.");
  9. } else {
  10. System.out.println("You have no discount.");
  11. }
  12. }
  13. }

در کد فوق چند نکته جدید وجود دارد که به تفصیل مورد بررسی قرار خواهند گرفت. در واقع جمله شرطی که برای اولین if نوشته شده است حاوی علامت && می باشد که به معنای "و" می باشد (این علامت مابین برنامه نویسان تحت عنوان Ampersand شناخته می شود). به طور خلاصه ما در این شرط دستور می دهیم که اگر IQ بیش از 110 بود "و" میانگین ترمی بیش از 18 بود دستور System.out.println(“You have 30 percent discount.”) که به معنای "شما 30 درصد تخفیف دارید" اجرا گردد.

حال به بررسی دومین نکته جدید در کد فوق می رسیم که عبارت است از else if که به طور خلاصه به معنای "و یا اینکه اگر" می باشد. شرطی که برای else if در نظر گرفته شده است حاکی از آن است که اگر IQ بیش از 100 بود "و" میانگین ترمی بیش از 17 بود دستور System.out.println(“You have 20 percent discount.”) که به معنای "شما 20 درصد تخفیف دارید" اجرا گردد.

نکته ای که در اینجا می بایست مد نظر قرار داده شود این است که ما به هر تعداد که نیاز داشته باشیم می توانیم از شروط else if در برنامه خود استفاده کنیم. حال در نهایت یک شرط else قرار می دهیم مبنی بر اینکه اگر کلیه شروط فوق چه از if گرفته چه از هر تعداد else if که داشته باشیم که دارای جواب false باشند، دستور قرار گرفته در else اجرا خواهد شد که در مثال فوق معادل با System.out.println(“You have no discount.”) به معنای "به شما هیچ تخفیفی تعلق نمی گیرد" می باشد. حال اگر کد فوق را اجرا کنیم با نتیجه ای مشابه تصویر زیر رو به رو خواهیم شد:

IMAGE 1_16th_java.jpg

در واقع از آنجا که میزان IQ معادل با 100 است و میزان معدل معادل با 17.3 است مسلماً دستور شرط if که اجرا نخواهد شد چرا که در شرط آمده است که میزان IQ بیش از 110 باشد و میزان معدل بالای 18 باشد. از سوی دیگر دستور شرط else if هم دارای جواب false خواهد بود چرا که میزان IQ در نظر گرفته شده بیش از 100 است و این در صورتی است که میزان IQ در متغیر ما خود عدد 100 است و دیگر اینکه میزان معدل بالای 17 در نظر گرفته شده است.(اگر چه که شرط در مورد معدل دارای جواب true است، اما از آنجا که ما در شرط خود قید کرده ایم که هم جواب شرط IQ "و" هم جواب شرط معدل بایستی true باشد پس این شرط در کل false خواهد شد). در نهایت وقتی جواب به شروط if و else if معادل با false باشد برنامه به سراغ آخرین گزینه که else می باشد می رود و هر دستوری که در آن باشد را اجرا خواهد کرد. حال با تغییر مقادیر متغیرهای این برنامه خواهیم توانست کلیه شروط برنامه را مورد بررسی قرار دهیم.

یکی از نکات جدیدی که در این آموزش مورد بررسی قرار گرفت استفاده از علامت && به معنای "و" در داخل شرط بود. حال زمانی را تصور کنیم که روسای دانشگاه تصمیم گرفته اند تا کمی در مورد سیاست تخفیف شهریه سهل گیرتر عمل کنند و برای همین منظور گفته اند که اگر کسی بخواهد که 30 درصد تخفیف بگیرد یا بایستی دارای IQ بیش از 110 باشد و یا دارای معدل بیش از 18 باشد. از سوی دیگر کسانیکه بخواهند 20 درصد تخفیف شامل ایشان شود می بایست یا دارای IQ بیش از 100 باشند و یا معدل ایشان بیش از 17 باشد. در نهایت کسانیکه هیچ یک از این چهار حالت شامل حال ایشان نشود هیچ گونه تخفیف شهریه ای نخواهند گرفت. در این صورت می بایست کد خود را به شکل زیر بازنویسی کنیم:

  1. public class NestedIfStatement {
  2. public static void main(String[] args) {
  3. double intelligenceQuotient = 100;
  4. double termMean = 17.3;
  5. if (intelligenceQuotient > 110 || termMean > 18) {
  6. System.out.println("You have 30 percent discount.");
  7. } else if (intelligenceQuotient > 100 || termMean > 17) {
  8. System.out.println("You have 20 percent discount.");
  9. } else {
  10. System.out.println("You have no discount.");
  11. }
  12. }
  13. }

در کد فوق تنها بخشی که بازنویسی شده است استفاده از علامت || به جای علامت && داخل شروط if و else if می باشد. به عبارت دیگر علامت || که از فشردن هم زمان دو بار کلید Shift و دکمه ای که بالای دکمه Enter در کیبوردهای استاندارد قرار دارد ایجاد می شود به معنای "یا" می باشد. حال دانشجویی که در کد پیشین هیچ گونه تخفیفی شامل حالش نمی شد، در این برنامه جدید 20 درصد تخفیف خواهد گرفت چرا که یکی از دو شرط else if شامل حال وی می شود(به عبارت دیگر از آنجا که معدل ایشان معادل با 17.3 است شرط معدل که می بایست بالای 17 باشد در مورد ایشان صدق کرده و بالتبع دستور شرط else if برای ایشان که همان 20 درصد تخفیف است اجرا خواهد شد). نتیجه برنامه جدید همانند نتیجه ای است که در تصویر زیر مشاهده می شود:

IMAGE 2_16th_java.jpg

در قسمت پایانی این آموزش به توضیح Nested If Statement ها می رسیم. به طور خیلی ساده می توان گفت که Nested If Statement ها به شرط های if گفته می شود که داخل یک شرط if دیگر قرار می گیرند. حال برای توضیح Nested If Statement ها کد فوق را به صورت زیر تغییر می دهیم:

  1. public class NestedIfStatement {
  2. public static void main(String[] args) {
  3. int age = 30;
  4.  
  5. }
  6. }

در کد فوق یک متغیر از جنس int تحت عنوان age به معنای "سن" داریم که Value اختصاص داده شده به آن معادل با 30 است. حال می خواهیم شرطی قرار دهیم مبنی بر اینکه اگر مقدار متغیر ما بیش از 40 بود دستوری اجرا شود مبنی بر اینکه جمله You are older than 40. به معنای "شما بیش از 40 سال سن دارید" در بخش Console نمایش داده شود و در غیر این صورت جمله You are not older than 40. به معنای "شما بیش از 40 سال سن ندارید" نمایش داده شود. برای همین منظور کد خود را به شکل زیر تکمیل می کنیم:

  1. public class NestedIfStatement {
  2. public static void main(String[] args) {
  3. int age = 30;
  4. if (age > 40) {
  5. System.out.println("You are older than 40.");
  6. } else {
  7. System.out.println("You are not older than 40.");
  8. }
  9. }
  10. }

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

IMAGE 3_16th_java.jpg

از آنجا که مقدار متغیر age معادل با 30 تعریف شده است و در شرط خود قرار داده ایم age > 40 پس جواب به این شرط false بوده و در نهایت دستور قرار گرفته در else اجرا می شود. حال می خواهیم تا یک شرط دیگر را داخل شرط اصلی بگنجانیم مبنی بر اینکه ببینیم با اینکه شما بیش از 40 سال سن ندارید آیا زیر 20 سال می باشید یا بالای 20 سال. از این رو کد خود را به شکل زیر تکمیل می کنیم:

  1. public class NestedIfStatement {
  2. public static void main(String[] args) {
  3. int age = 30;
  4. if (age > 40) {
  5. System.out.println("You are older than 40.");
  6. } else {
  7. System.out.println("You are not older than 40.");
  8. if (age < 20) {
  9. System.out.println("You are under 20.");
  10. } else {
  11. System.out.println("You are over 20.");
  12. }
  13. }
  14. }
  15. }

در صورت false بودن شرط if که درکد فوق مشاهده می شود، در بخش else دستوری آمده است که جمله You are not older than 40. را نشان خواهد داد. حال بلافاصله یک دستور شرطی دیگر پس از else قرار گرفته مبنی بر اینکه حالا که شما بیش از 40 سال سن ندارید می خواهیم ببینیم که سن شما زیر 20 سال است یا بالای 20 سال. به همین خاطر در شرط مقابل if دوم برنامه می نویسیم age < 20 که اگر جواب به آن true باشد جمله You are under 20. به معنای "شما زیر 20 سال سن دارید" نمایش داده خواهد شد و در غیر این صورت دستور else دوم که You are over 20. که به معنای "شما بیش از 20 سال سن دارید" می باشد اجرا خواهد شد. پس از اجرای برنامه نتیجه زیر مشاهده خواهد شد:

IMAGE 4_16th_java.jpg

به طور خلاصه در شرط اول مشخص می شود که "سن شما بیش از 40 سال نیست" و در if دومی که داخل if اصلی قرار گرفته است مشخص می شود که "شما بیش از 20 سال سن دارید". همانطور که در آموزش دوازدهم گفتیم، به منظور درک بهتر متدهای boolean کلاس Scanner نیاز به آشنایی با دستورات if داریم. حال که به دستورات if تسلط پیدا کرده ایم، خواهیم توانست تا در قالب پروژه ای این متدها را مورد بررسی قرار دهیم. در حقیقت در آموزش آتی پروژه ای به این صورت تعریف می کنیم که کاربر می بایست برای ورود به حساب کاربری خود یک رمز عبور وارد کند. حال برنامه ما می سنجد که آیا این عدد از جنس یک عدد صحیح است یا خیر اگر عدد صحیح است آیا با رمز برنامه نیز خوانی دارد یا خیر که در صورت true بودن هر دو شرط کاربر خواهد توانست وارد حساب کاربری خود شود.

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