در آموزش گذشته با دستور 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!
به عنوان نکتهٔ پایانی، به دانشجویان پیشنهاد میکنیم که تا حد ممکن از کپی کردن کدها از داخل آموزش خودداری نموده و سعی کنند تا برنامه را به صورت دستی در محیط اکلیپس بنویسند چرا که با این کار هم مهارت سریع تایپ کردن خود را بهبود بخشیده و در ضمن راحتتر به منطق پشت هر خط از کد پی میبرند.