نحوۀ استفاده از دستور break در switch در زبان برنامه‌نویسی جاوا


در آموزش گذشته با دستور switch آشنا شدیم و نحوۀ پیاده‌سازی شرایط مختلف برنامه با به‌کارگیری کیورد case را تشریح نمودیم. در این قسمت از آموزش به کاربرد دستور break در پایان کِیس‌های برنامه می‌پردازیم تا ببینیم چگونه هر کِیس بررسی شده و در صورت برقرار بودن شرط مد نظر دستورات متناظر آن اجرا می‌گردند. برای شروع، پروژۀ مربوط به آموزش قبل را مجدداً مد نظر قرار می‌دهیم:

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

به طور کلی، نحوۀ بررسی و اجرای دستورات case بدین صورت است که مقدار منتسب به متغیر مرتبط با دستور switch به ترتیب با مقدار درج‌شده در مقابل هر یک از دستورهای case مقایسه شده و دستور مرتبط با اولین کِیسی اجرا می‌شود که مقدار درج‌شده در مقابل آن با مقدار منتسب به متغیر مرتبط با دستور switch برابری داشته باشد و بدین ترتیب دستور break مربوط به case متناظر نیز اجرا شده و برنامه از دستور شرطی switch خارج می‌گردد.

بنابراین با اجرای برنامۀ فوق، مشابه آنچه در آموزش گذشته بیان کردیم، عدد ورودی از سمت کاربر به متغیر monthNumber اختصاص داده شده سپس مقدار منتسب به این متغیر به عنوان شرط دستور switch در نظر گرفته می‌شود و در ادامه به ازای مقادیر مختلف منتسب به این متغیر دستورهای case بررسی شده و دستور مرتبط با اولین کِیسی اجرا می‌شود که مقدار مندرج در مقابل آن با مقدار دریافت‌شده از کاربر مساوی باشد که از همین روی دستور break در کِیس مذکور نیز اجرا شده و سایر دستورات case بررسی نمی‌شوند و در نهایت برنامه از دستور شرطی switch خارج می‌شود.

حال فرض کنیم که عدد 7 را به عنوان ورودی به برنامه می‌دهیم که در این صورت اولین کِیس بررسی می‌شود که آیا عدد درج‌شده در مقابل آن با عدد 7 برابر است یا خیر که شرط برقرار نبوده و بدین ترتیب هر یک از کِیس‌های بعدی نیز چک می‌شوند تا زمانی که عدد نوشته‌شده در مقابل کِیس هفتم با مقدار منتسب به متغیر monthNumber برابر بوده و بدین ترتیب دستور مرتبط با آن مبنی بر چاپ استرینگ «.You were born in Mehr» اجرا می‌گردد. بنابراین می‌توان گفت که به‌کارگیری دستور break در پایان هر case منجر بدین می‌شود تا در صورت برقرار بودن یکی از کِیس‌ها، از اجرای سایر کِیس‌های مطرح‌شده جلوگیری به عمل آید.

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

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

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

Please enter the number of your birth month: 1
You were born in Farvardin.
You were born in Ordibehesht.
You were born in Khordad.
You were born in Tir.
You were born in Mordad.
You were born in Shahrivar.
You were born in Mehr.
You were born in Aban.
You were born in Azar.
You were born in Day.
You were born in Bahman.
You were born in Esfand.

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

You were born in Day.
You were born in Bahman.
You were born in Esfand.

همان‌طور که مشاهده می‌کنیم، دستور مرتبط با case 10 و همچنین تمامی کِیس‌های نوشته‌شده پس از آن اجرا شده و استرینگ‌های مربوطه در کنسول چاپ شده‌اند.

آشنایی با کاربرد دستور default

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

دستور default حاکی از آن است که در صورت بروز شرایطی به غیر از شروط مطرح‌شده در تمامی کِیس‌های برنامه، می‌باید دستور مرتبط با default اجرا شود. بنابراین با آگاهی از کاربرد این دستور، به تکمیل کد فوق می‌پردازیم تا بدین طریق برنامۀ مذکور در صورت دریافت اعدادی به غیر از 1 تا 12 بتواند دستوری پیش‌فرض را اجرا کند و استرینگی با مضمون «اشتباه بودن عدد ورودی» در کنسول نمایش داده شود که برای این منظور کدی مانند زیر خواهیم داشت:

import java.util.Scanner;
public class MySwitchClass {
    public static void main(String[] args) {
        Scanner keyboardInput = new Scanner(System.in);
        System.out.print("Please enter the number of your birth month: ");
	    int monthNumber = keyboardInput.nextInt();
	    switch (monthNumber) {
	        case 1:
	            System.out.println("You were born in Farvardin.");
	            break;
	        case 2:
	    	    System.out.println("You were born in Ordibehesht.");
	            break;
	        case 3:
	            System.out.println("You were born in Khordad.");
	            break;
	        case 4:
	    	    System.out.println("You were born in Tir.");
	            break;
	        case 5:
	            System.out.println("You were born in Mordad.");
	            break;
	        case 6:
	            System.out.println("You were born in Shahrivar.");
	            break;
	        case 7:
	            System.out.println("You were born in Mehr.");
	            break;
	        case 8:
	            System.out.println("You were born in Aban.");
	            break;
	        case 9:
	            System.out.println("You were born in Azar.");
	            break;
	        case 10:
                    System.out.println("You were born in Day.");
	            break;
	        case 11:
	    	    System.out.println("You were born in Bahman.");
	            break;
	        case 12:
	    	    System.out.println("You were born in Esfand.");
	            break;
	        default:
	        	System.out.println("You made a mistake!");
	    }
        keyboardInput.close();
    }
}

پس از اجرای کد فوق و وارد کردن عددی به غیر از اعداد 1 تا 12، هیچ یک از شروط مرتبط با کِیس‌های برنامه برقرار نبوده و از همین روی دستور مرتبط با default اجرا می‌شود و توجه داشته باشیم که دستور break در انتهای دستور default نوشته نمی‌شود چرا که به هر حال default آخرین دستور نوشته‌شده در برنامه بوده و پس از اجرای آن نیز مفسر از دستور switch خارج می‌گردد. حال برنامۀ فوق را اجرا کرده و خروجی حاصل از آن به صورت زیر خواهد بود:

Please enter the number of your birth month: 13
You made a mistake!

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



بهزاد مرادی

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
Sharifi_7
Sharifi_7
۱۳۹۷/۰۲/۰۴
آموزش عالیه...خیلی با حوصله و شیوا تدریس میکنید ... دمتون گرم
کاربر میهمان
mehradمن یک کاربر مهمان هستم
۱۳۹۵/۰۴/۰۹
به قول مهران مدیری خعععلی ممنونم واسه سایت خوبتون واسه من ک خیلی مفید بوده
کاربر میهمان
Titanمن یک کاربر مهمان هستم
۱۳۹۵/۰۴/۰۶
سپاس
Mahmood
Mahmood
۱۳۹۵/۰۲/۱۶
با سلام خدمت دوستان و اساتید عزیز مخصوصا استاد گرامی بهزاد مرادی
من میخوام قبل از اینکه شرط switch انجام بشه نوع داده ورودی رو چک کنه ولی این کد رو نوشتم کار نمی کنه ممنون میشم راهنماییم کنید.
import java.util.Scanner;


public class MySwitchClass {
public static void main(String[] args) {
Scanner keyboardInput = new Scanner(System.in);
System.out.print("Please enter the number of your birth month: ");
int monthNumber = keyboardInput.nextInt();
//check the enter data type
if(keyboardInput.hasNextInt()){

switch(monthNumber){
case 1 :
System.out.println("You were born in Farvardin");
break;
case 2 :
System.out.println("You were born in Ordibehesht");
break;
case 3 :
System.out.println("You were born in Khordad");
break;
case 4 :
System.out.println("You were born in Tir");
break;
case 5 :
System.out.println("You were born in Mordad");
break;
case 6 :
System.out.println("You were born in Shahrivar");
break;
case 7 :
System.out.println("You were born in Mehr");
break;
case 8 :
System.out.println("You were born in Aban");
break;
case 9 :
System.out.println("You were born in Azar");
break;
case 10 :
System.out.println("You were born in Dey");
break;
case 11 :
System.out.println("You were born in Bahman");
break;
case 12 :
System.out.println("You were born in Esfand");
break;
default :
System.out.println("You made a mistake boy!");
break;
}
}else{
System.out.println("Sorry, please enter the right format");
}

}
}
کاربر میهمان
زهرامن یک کاربر مهمان هستم
۱۳۹۵/۰۱/۲۶
خیلی زیاد... عالی.. واقعا خسته نباشید و ممنون
mkhorsandifar
mkhorsandifar
۱۳۹۴/۱۲/۲۱
سلام
اول می خواستم از اینکه این سایتو راه اندازی کردید تشکر کنم.....
بعدم اینکه من هدفم یادگرفتن اندروید هست، خواستم بدونم جاوا را باید تا آخرش تو سکان آکادمی بخونم بعد برم سراغ اندروید؟
ممنون
هاشم همراز
هاشم همراز
۱۳۹۴/۰۹/۲۲
با سلام و عرض خسته نباشید خدمت شما عزیزان
من تو کدهایی که مینویسم کنار خط
Scanner keyboardInput = new Scanner(System.in);
یه اخطار زرد رنگ میذاره و این پیام رو نشون میده
Resource leak: 'keyboardInput' is never closed
برای رفع این حالت چیکار باید بکنم؟
ApA
ApA
۱۳۹۴/۰۹/۲۰
باسلام و ممنون از آموزش فوق العاده تان
میخواستم بدونم با توجه به اینکه گفته بودید آموزشها در محیط کنسول هستند من اگه این آموزشها و آموزش اندرویدتون را یاد بگیرم میتونم برنامه اندروید بنویسم یا نه؟
ممنون میشم اگه جوابمو بدید
کاربر میهمان
احمدمن یک کاربر مهمان هستم
۱۳۹۴/۰۹/۰۷
خیلی خیلی ممنونم که جوابمو دادین.فقط ببخشید متوجه نشدم،یعنی میگین فصل 15 آموزش جاوا را نیازی نیست بخونم و برم سراغ آموزش اندروید؟????
کاربر میهمان
وهابمن یک کاربر مهمان هستم
۱۳۹۴/۰۹/۰۶
اول تشکر فوق العاده من رو بپزیرید
دوم میخواستم بدونم تو دستور case میشه دستور های مقایسه ای گزاشت مثل بزرگتر یا کوچکتر یا...
باز هم متشکر