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