ساختار شرطی if و switch در جاوا

+1
+58
1394/02/13 0 2315 م.مطلبی

در این درس می خواهیم شما دوستان را با ساختار شرطی if و switch که مورد استفاده زیادی در هنگام برنامه نویسی با جاوا دارد آشنا کنیم .در ادامه با ساب سان همراه باشید با آموزشی دیگر از جاوا.

ساختار شرطی if و switch در جاوا

در برنامه ها هرگاه به تصمیم گیری نیازمند باشیم استفاده از این ساختار اجتناب ناپذیر است .اساس کار این ساختار بر یک عبارت منطقی استوار است که در صورت true بودن ارزش این عبارت ، دستورات بلوک true و در غیر این صورت دستورات بلوک false اجرا می شوند. توجه نماییدکه منظور از بلوک true بخش if و منظور از بلوک false بخش else در ساختار مورد نظر می باشد . در زیر نحوه استفاده از ساختار if را مشاهده می نمایید.


if (expression)
{
    True statement;
}
else
{
    False statement;
}

 

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


switch (var)
{
     case value1:
          state1;
          break;
     case value2:
          state2;
          break;
     case value3:
          state3;
          break;
     default:
          state_default;
          break;
}

در ساختار ما سه مقایسه انجام داده ایم. اما شما می توانید به هر تعداد که مایل باشید مقایسه  انجام دهید. توجه شود که در هر بخش مقایسه حتما باید از دستور break استفاده کنیم که به محض برقراری یک شرط و اجرای دستورات مربوط به آن باید دستور break مربوطه اجرا گردد تا از انجام دیگر مقایسه ها جلوگیری شود.در صورتی که هیچ کدام از مقایسه ها برقرار نباشد آنگاه وارد بخش default شده و دستورات بخش مربوطه اجرا می کردد. همان گونه که در این ساختار مشاهده می نمایید دستور switch  بر روی یک متغیر ایجاد می شود . نوع متغیر می تواند هر یک از انواع داده ای اولیه مانند byte ، char و انواع داده مشابه باشد. این متغییر با تمامی مقادیر case مقایسه می شود.در صورتی که برابر باشد دستور و یا دستورات بخش case مربوطه اجرا می شود و در صورتی که متغیر مورد نظر با هیچ یک از مقادیر case برابر نباشد دستور و یا دستورات بخش default اجرا می شود.لازم به توضیح است که ذکر بخش default اختیاری می باشد. در صورت عدم استفاده از آن و نیز عدم برقراری تساوی بین متغیر ساختار و نیز مقادیر case  ، دستور switch بدون اجرا هیچ عملیاتی به پایان می رسد . باید متذکر شویم که اجرای ساختار switch در جاوا دارای محدودیت هایی می باشد که می خواهیم به معرفی آنها بپردازیم.متغیر ساختار و نیز مقادیر case تنها می توانند از انواع داده اولیه باشند که قابلیت casting به تایپ داده ای int را دارند. توجه شود که در این ساختار اجازه استفاده از تایپ های داده ای بزرگتر مانند float و یا double و یا string و long را نداریم. در این ساختار تنها باید بررسی برابری متغیر ساختار با مقادیر case را انجام دهیم. در ادامه با استفاده از یک تمرین عملی نحوه بهره گیری از ساختارهای if و switch را به شما دوستان نشان می دهیم.

به همین منظور پروژه ایجاد شده در درس قبل را باز کنید و کلاس جدیدی با نام subsun_class_9 به پکیج subsun_package اضافه کنید .و درون آن را بصورت زیر پر کنید و آن را توسط ترکیب کلید های ctrl+s ذخیره کنید.

package subsun_package;
import javax.swing.JOptionPane;

public class subsun_class_9 {

     public static void main(String args[]){
          String num;
          int k;
           num=JOptionPane.showInputDialog("Enter your number");//دریافت یک عدد از کاربر
           k=Integer.parseInt(num);//تبدیل رشته به عدد
           if(k<20){//مقایسه عدد دریافتی کاربر با عدد 20
                    System.out.println("your choice not good");//k < 20
                }
           else
                {
                    System.out.println("your choice is good");// k >= 20
                }
      System.exit(0);
     }

}

در این دستورات همان گونه که مشاهده می شود ابتدا عددی از کاربر توسط کادر محاوره ای JOptionPane.showInputDialog دریافت می کنیم و سپس توسط  تابع parseInt از کلاس Integer عملیات تبدیل نوع داده ای رشته به عدد را انجام داده ایم در ادامه با استفاده از یک ساختار شرطی if بررسی کرده ایم که این عدد در چه محدوده ای واقع شده است و بر اساس مقدار وارد شده توسط کاربر پیغام مناسب به او نمایش داده می شود. حال زمان تست عملکرد برنامه می رسد .فایل subsun_class_9 را در Package Explorer ایکلیپس انتخاب کنید و آن را اجرا کنید.

نتیجه اجرای برنامه را برای عدد 30 در زیر می توانید مشاهده کنید.

شما می توانید پس از اجرای برنامه داده دلخواهی را وارد کرده و بر روی دکمه Ok کلیک می کنیم مشاهده می شود که برنامه بر اساس داده ای که وارد کرده ایم نتیجه مناسب را در خروجی نمایش می دهد.در واقع با استفاده از یک ساختار if مقدار ورودی کاربر را بررسی نموده ایم و بر اساس آن مقدار تصمیم مناسب را اتخاذ کرده ایم. حال می خواهیم دومین تمرین عملی این بخش را انجام دهیم . در این برنامه دو آرگومان ماه و سال را به برنامه وارد کرده وسپس تعداد روز های آن ماه توسط برنامه نمایش داده می شود .به همین منظور پروژه ایجاد شده در درس قبل را باز کنید و کلاس جدیدی با نام subsun_class_10 به پکیج subsun_package اضافه کنید .و درون آن را با دستورات زیر پر کنید و آن را توسط ترکیب کلید های ctrl+s ذخیره کنید.

package subsun_package;

public class subsun_class_10 {

     public static void main(String[] arguments) {
          int yearIn = 2015;
          int monthIn = 4;
          if (arguments.length > 0)
               monthIn = Integer.parseInt(arguments[0]);
          if (arguments.length > 1)
               yearIn = Integer.parseInt(arguments[1]);

          System.out.println(monthIn + "/" + yearIn + " has "
               + countDays(monthIn, yearIn) + " days.");
      }
     
      static int countDays(int month, int year) {
           int count = -1;
           switch (month) {
               case 1:
               case 3:
               case 5:
               case 7:
               case 8:
               case 10:
               case 12:
                    count = 31;
                    break;
                    
               case 4:
               case 6:
               case 9:
               case 11:
                    count = 30;
                    break;

               case 2:
                    if (year % 4 == 0)
                         count = 29;
                    else
                         count = 28;

                if ((year % 100 == 0) & (year % 400 != 0))
                         count = 28;
               }
           return count;
     }
}

در این لحظه می خواهیم به بررسی عمل کرد این دستورات بپردازیم. همان طور که مشاهده می نمایید این برنامه برای مشخص کرده ماه و سال از آرگومان های خط فرمان بهر می گیرد. اولین آرگومان ماه است که عددی بین 1 تا 12 می باشد . دومین عددی سال است که یک عدد چهار رقمی می باشد . در صورتی که این برنامه را بدون آرگومان اجرا کنیم آنگاه بصورت پیش فرض سال 2015 و ماه 4 در نظر گرفته می شود .
هنگامی که برنامه را اجرا می کنیم ابتدا متد main اجرا می شود آرگومان های خط فرمان در تمامی برنامه های جاوا در آرایه ای از اشیا رشته ای ذخیره می شود آرایه مورد نظر در این برنامه arguments می باشد اولین آرگمان در خط فرمان در arguments[0] ذخیره می شود و دومین آرگمان درون arguments[1] ذخیره می گردد در دروس بعد شما دوستان رابا نحوه کار آرایه ها آشنا می کنیم در صورتی که هیچ آرگمانی به خط فرمان ارسال نشود آنگاه آرایه ای بدون عنصر ایجاد شده و سپس برنامه اجرا می گردد. در ادامه بررسی دستورات دو متغیر monthIn و yearIn برای ذخیره  ماه و سالی که باید بررسی شوند ایجاد می گردند در این دستورات ساختار if برای حصول اطمینان از این که  آرایه آرگومان دارای حداقل یک عنصر است یا خیر از متغیر  arguments.length استفاده می کند در صورتی که این عبارت صحیح ارزیابی شود آنگاه متد parseInt از کلاس Integer فراخوانی می گردد arguments[0] به عنوان آرگمان ورودی به این متد ارسال می شود در ادامه خروجی تابع parseInt درون متغیر monthIn ذخیره می شود . عملیاتی مشابه نیز بر روی arguments[1] نیز انجام می شود .
در این برنامه برای نمایش تعداد روز های هر ماه از ساختار شرطی switch استفاده کرده ایم در این دستورات متد countDays دو آرگمان month و year که از نوع int می باشند را دریافت می کند . در این متد تعداد روز ها درون متغیر count ذخیره می شود متغیر مذکور همان طور که مشاهده می نمایید دارای مقدار اولیه -1 می باشد اما در طول برنامه تعداد روز های جای گزینه این مقدار می شود توجه شود که محاسبه تعداد روز های یک ماه برای 11 ماه از سال بسیار ساده است همانطور که می دانید ماه های 1 , 3 , 5 , 7 , 8 , 10 , 12 همگی 31 روزه می باشند و ماه های 4 , 6 , 9 , 11 سی  روز دارند . در دستوراتی که مشاهده می نمایید شمارش روز های ماه های مذکور صورت می پذیرد. همان طور که مشاهده می شود ماه ها از 1 تا 12 نام گذاری شده اند زمانی که یکی از case ها مقداری برابر با ماه باشد تمامی دستورات بعد از آن تا زمان رسیدن به break اجرامی شود اما کار برای ماه 2 کمی سختر است محاسبه تعداد روز های این ماه در دستوراتی که مشاهده می نمایید انجام می شود . در واقع این ماه برای سال های کبیسه 29 روز است اما برای دیگر سالها 28 روزه می باشد در این حالت باید شرایط سال های کبیسه را مورد بررسی قرار دهیم اولاً این سال باید بر 4 بخش پذیر باشد اما بر 100 بخش پذیر نباشد همچنین این سال باید بر 400 بخش پذیر باشد . در دروس قبلی شما با عملگر باقی مانده آشنا شدید .جهت مشخص کردن تعداد روز های ماه فوریه با توجه به سال مشخص شده از این عمل بصورتی که مشاهده می نمایید استفاده می کنیم در صورتی که year بر 4 بخش پذیر باشد آنگاه مقدار متغیر count را با 29 مقدار دهی می کنیم و در غیر این صورت مقدار این متغییر را با 28 مقدار دهی می کنیم این دستورات را در بالا مشاهده می نمایید. در این دستورات ساختار if از عملگر & برای ترکیب دو شرط استفاده می نماید در صورتی که دو شرط درست ارزیابی شد مقدار count برابر 28 می شود در این دستورات همان طور که مشاهد می شود متد countDays باخروجی دادن مقدار count خاتمه می یابد.
حال می خواهیم عملکرد برنامه را مورد بررسی قرار دهیم .در ایکلپس برای ارسال آرگمان به متد main  باید به بخش Run Configurations بروید. برای این منظور فایل subsun_class_10 را در Package Explorer ایکلیپس انتخاب نمایید و سپس روی آن راست کلیک کنید ، در منو ظاهر شده گزینه Run As  و از آن Run Configurations را انتخاب کنید .در پنجر ظاهر شده در تب Arguments ، آرگمان های ماه و سال را همان گونه که در تصویر زیر می بینید وارد کنید و برنامه را اجرا کنید.

eclipse run configurations arguments

نتیجه اجرای برنامه با توجه با آرگومان های ماه و سال که به ترتیب 2 و 2014 تنظیم گردیده است به صورت زیر می باشد .


2/2014 has 28 days.

دیدگاه ها (0)

ارسال دیدگاه ها

Image CAPTCHA
حروف نمایش داده شده در تصویر را وارد کنید.