معرفی دستور سوییچ در زبان برنامه نویسی جاوا


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

به خاطر داشته باشید
فراموش نکنیم که با استفاده از دستورات if و else نیز می توانیم احتمالات بیش از دو مورد را مورد سنجش قرار دهیم اما این در حالی است که باید کد بیشتری بنویسیم! و همواره یکی از وظایف برنامه نویسان حرفه ای، انجام کارها با تعداد خطوط کمتر است.

برای روشن شدن کاربرد دستور switch سناریویی به شکل زیر تعریف می کنیم: فرض کنیم می خواهیم برنامه ای بنویسیم که در ابتدای برنامه از کاربر می خواهیم که عدد مربوط به ماهی که در آن متولد شده است را وارد کند. پس از آن که کاربر این کار را انجام داد، برنامه ای که ما طراحی کرده ایم نام ماه انتخابی را برای کاربر به نمایش در خواهد آورد (ممکن است برخی از برنامه نویسان مبتدی این سوال برایشان پیش آید که فایده نوشتن چنین برنامه ای چیست؟ در پاسخ به سوال فوق بایستی گفت که در موارد بسیاری به خصوص در ثبت نام های اینترنتی مثل ثبت نام آنلاین دانشگاه پیش می آید که از شما خواسته می شود تا یکسری فرم را پر نمایید. بخشی از این فرم مربوط به تاریخ تولد شما است که شما صرفاً اجازه دارید تا یکی از 12 ماه سال را انتخاب کنید و یا از شما خواسته می شود تا کد مربوط به شهر محل تولد خود را انتخاب نمایید. پس از پر کردن کلیه فضاهای خالی فرم، از شما خواسته می شود تا دکمه تایید را فشار دهید. پس از این کار، صفحه ای برای شما نمایش داده می شود که کلیه اطلاعات وارده توسط شما را پیش روی شما قرار می دهد تا در صورت تایید شما و فشردن دکمه تایید نهایی اطلاعات به سرور فرستاده شوند. در این صفحه دوم دیده می شود که در بخش تاریخ تولد به جای چاپ شماره ماه (مثلاً  12 )، نام ماه که اسفند می باشد نمایش داده می شود و یا به جای نشان دادن کد شهری که در آن متولد شده اید، نام آن شهر (مثلاً اراک) را برای شما نمایش دهد.)

اکنون پروژه جدیدی با نام SwitchIntro در محیط برنامه نویسی اکلیپس ایجاد کرده، کلاسی در آن تحت عنوان MySwitchClass یا هر نام دیگری می سازیم (به خاطر داشته باشیم که حرف اول نام کلاس می بایست با حرف بزرگ نوشته شود و اجازه نداریم تا از کاما و یا خط تیره و دیگر علائم در نام کلاس خود استفاده کنیم. البته استفاده از _ یا اصطلاحاً Underscore بلامانع است.) به خاطر داشته باشیم که در حین ساخت کلاس، گزینه public static void main را تیک بزنیم. پس از باز کردن فایل کلاسی که ایجاد کرده ایم، کلیه ی کامنت های پیش فرض را حذف کرده و کدی مشابه کد زیر خواهیم داشت:

public class MySwitchClass {
    public static void main(String[] args) {
	
    }
}

در این مرحله از کدنویسی، کلاسی تحت عنوان Scanner را وارد برنامه خود می کنیم. در واقع این کلاس امکان استفاده از کیبورد پی سی و یا لپ تاپ را به ما داده و اطلاعات ورودی از کیبورد را به برنامه ما ارسال می کند (جهت آشنایی بیشتر با این کلاس، می توانید به آموزش معرفی کلاس اسکنر در زبان برنامه نویسی جاوا رجوع نمایید.) کد تکمیل شده در این مرحله از کار به شکل زیر خواهد بود:

import java.util.Scanner;
public class MySwitchClass {
    public static void main(String[] args) {
	Scanner keyboardInput = new Scanner(System.in);
    }
}

در این کد ما یک Instance یا به عبارتی یک "شیء" از کلاس Scanner را خواهیم ساخت. برای همین منظور، کلید واژه Scanner را نوشته و نامی برای آن انتخاب می کنیم. در اینجا نام keyboardInput به معنی "ورودی کیبورد" انتخاب شده است. توجه داشته باشید که نحوه نوشتن این نام به صورت camelCase می باشد.

پس از علامت = کلید واژه ی new را نوشته -توجه داشته باشید که حرف اول این واژه بایستی به صورت کوچک باشد- و مجدداً واژه ی Scanner را می نویسیم. در حقیقت با این کار ما یک Object یا شیء جدید از جنس کلاس Scanner که از قبل در API زبان برنامه نویسی جاوا طراحی شده است ایجاد می کنیم. داخل پرانتزی که مقابل واژه Scanner قرار دارد می نویسیم System.in به این معنی که ورودی سیستم -که همان کیبورد است- را هدف قرار دهد (توجه داشته باشید که واژه سیستم با حرف بزرگ نوشته شده است.) در این مرحله خواهید دید که محیط برنامه نویسی اکلیپس دور هر دو واژه Scanner نقطه چین قرار می دهد که به معنی وجود مشکلی در برنامه می باشد. با قرار دادن نشانگر موس روی یکی از نقطه چین ها صفحه ای باز خواهد شد که داری یکسری پیشنهاد برای رفع این مشکل است. این صفحه به شکل زیر خواهد بود:

اولین پیشنهادی که اکلیپس به ما می دهد (Import ‘Scanner’ (java.util می باشد که دقیقا مد نظر ما هم همین پیشنهاد است. پس از انتخاب این گزینه با کلیک کردن بر روی آن، مشاهده می کنیم که ;import java.util.Scanner در بالای سورس کد ما ظاهر می شود. کاری که این خط از کد انجام می دهد این است که کلاس Scanner که قبلاً در API زبان برنامه نویسی جاوا ایجاد شده است را در کد ما فرا می خواند و از این پس ما خواهیم توانست در هر جای کد خود از این کلاس به سهولت استفاده کنیم (لازم به ذکر است که پس از استفاده ی مکرر از این کلاس، خواهیم دید که این خط از کد ملکه ی ذهن ما شده و خودمان هم به صورت دستی بدون نیاز به استفاده از گزینه Import می توانیم آن را در بخش فوقانی کد نوشته و مشکل را رفع کنیم.) به عنوان راه کار دیگر، می توان برای Import کردن این کلاس در برنامه خود، پس از نوشتن آن به طور هم زمان کلیدهای Ctrl+Shift+O را فشار دهیم.

پس از این کار نیاز داریم تا جمله ای را در کنسول به نمایش در آوریم مبنی بر این که عدد ماه تولد خود را وارد نمایید. برای این منظور کد خود را به شکل زیر تکمیل می کنیم:

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 به معنی "شماره ماه" ایجاد می کنیم. هر متغیر نیاز به یک مقدار دارد که در این جا به طور مثال با قرار دادن یک علامت = و عددی همچون 12 می توان این مقدار را برای متغیر خود تعریف کرد. اما کاری که در اینجا می خواهیم انجام دهیم این است که مقدار متغیر خود را به صورت دینامیک وارد برنامه خود کنیم و به همین خاطر است که از کلاس Scanner استفاده می کنیم. برای این منظور کد خود را به شکل زیر تکمیل می کنیم:

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();
    }
}

در اینجا به جای آن که پس از علامت = یک عدد وارد نماییم، شیئ از کلاس Scanner تحت عنوان keyboardInput که در مرحله پیش ایجاد کردیم را فرا می خوانیم. سپس یک نقطه به دنبال آن قرار داده و بلافاصله پنجره ای به شکل زیر نمایان می شود و اگر این اتفاق نیفتاد می توان دکمه های Ctrl و Space را به طور هم زمان بفشاریم:

در این پنجره برای تکمیل کد تعدادی پیشنهاد مشاهده می شود که از میان آن ها متد ()nextInt مورد نیاز ما است چرا که متغیر ما از جنس int است. لازم به ذکر است که اگر زمانی نیاز داشتیم تا اعداد اعشاری را از طریق کیبورد وارد برنامه خود کنیم، پس از انتخاب متغیری از جنس double می بایست در این مرحله گزینه ی ()nextDouble را انتخاب کنیم.

پس از کلیک کردن بر روی گزینه ی ()nextInt یک علامت ; در انتهای دستور خود قرار می دهیم تا آن را به پایان برسانیم. در این مرحله از آموزش، مطلب جدیدی که همان استفاده از switch است را توضیح خواهیم داد. در واقع ساختار switch همانند ساختار if است. به عبارت دیگر، به صورت ()switch سپس علامت های { } نوشته می شود که داخل پرانتز می بایست پارامتر ورودی که در اینجا همان شماره ماه است وارد شود و داخل دو علامت { }، می بایست دستورات شرطی قرار گیرند. برای ادامه کار، نام متغیر خود که همان monthNumber است را داخل پرانتز می نویسیم و کد خود را به شکل زیر تکمیل می کنیم:

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){
			
	}
    }
}

مابین دو علامت { } قرار گرفته مقابل switch می بایست 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;
        }
    }
}

در واقع با تکمیل کد خود به این شکل به کامپیوتر دستور می دهیم که اگر مقدار ورودی از طریق کیبورد به متغیری از جنس int تحت عنوان monthNumber معادل با 1 بود، جمله ی .You were born in Farvardin به معنی "شما در ماه فروردین متولد شدید." نمایش داده شود. در این مرحله دستور ;break را توضیح نخواهیم داد چرا که در آموزش بعد به اهمیت آن بیشتر پی خواهیم برد (به خاطر داشته باشیم که پس از کلید واژه ی case می بایست علامت : قرار داد و پس از کلید واژه ی break علامت ; قرار داد.) با copy و paste کردن بخش جدید کد به تعداد یازده بار دیگر، دستورات شرطی را برای کلیه ماه های سال ایجاد می کنیم و آن ها را برای یازده ماه دیگر ویرایش می کنیم و در نهایت کد ما به شکل زیر در خواهد آمد:

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;
	}
    }
}

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

با کلیک کردن داخل کنسول نرم افزار اکلیپس، یک عدد از 1 تا 12 را وارد می کنیم. به طور مثال عدد 1 را وارد می کنیم سپس دکمه اینتر را می زنیم. پس از اجرای برنامه نتیجه ای مشابه تصویر زیر خواهیم دید:

چنانچه برنامه را مجدد اجرا کرده و عددی دیگری همچون 7 را وارد برنامه کنیم، برنامه case مرتبط با آن را فرا خواهد خواند. حال اگر کاربر عددی به غیر از اعداد 1 تا 12 را وارد کنیم چه اتفاقی خواهد افتاد:

همانطور که در تصویر فوق مشاهده می شود با وارد کردن عدد 13 که جزو case ها برنامه ما نیست، برنامه هیچ چیزی نمایش نخواهد داد چرا دستوری برای چنین شرایطی تعریف نکرده ایم. در قسمت بعد پیرامون دستور break توضیحاتی خواهیم داد و علاوه بر آن خواهیم دید که دستور default چگونه بر مشکلی که در تصویر فوق پیش آمده فائق خواهد آمد.

دانلود فایل‌های تمرین
لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
کاربر میهمان
کاربر میهمانمن یک کاربر مهمان هستم
عالی بود
mahdis1994
mahdis1994
سلام
ممنون از زحماتتون برای این آموزش
من یه سوالی داشتم ، من باید یک پروژه ای را انجام بدهم که در آن یک پایگاه داده در PL/SQL ساخته ام و باید با زبان جاوا UI بسازم و از طریق آن در پایگاه داده ذخیره کنم ؟ شما میتوانید منو راهنمایی کنید ؟
باتشکر
کاربر میهمان
سعیدمن یک کاربر مهمان هستم
سلام. ممنون از اموزشتون.
در این برنامه ای که نوشتیم اگر کاربر عدد اعشاری یا کاراکتری وارد کنه برنامه crash میکنه؟ چطور میتونیم طوری بنویسیم که اگر اینطوری شد هم یک جوابی به کاربر بده جای اینکه crash کنه؟
javad
javad
درود خداوند بر شما

واقعا خیلی کار درستین،خدا قوت
کاربر میهمان
مازیارمن یک کاربر مهمان هستم
سلام میشه از این پروژه ها خروجی jar. گرفت یا exe. ممنون میشم اگه جواب بدید
javad
javad
معذرت میخوام منظورم فایل های تمرین بود
تا یه جایی دانلود میشه بعد اخطار میده دوباره از اول شروع به دانلود میکنه
javad
javad
سلام
فایل های آموزشی خراب است لطفا درستش کنید
کاربر میهمان
mozhhمن یک کاربر مهمان هستم
با تشکر از توضیحات خوبتان. من میخوام کدهای موجود در صفحه ی https://github.com/tdebatty/java-LSH#binning را در نت بینز اجرا کنم .لطفا راهنماییم کنید.
کاربر میهمان
mozhhمن یک کاربر مهمان هستم
ممنون بابت توضیح خوبتان. من یه برنامه ای رو از یه سایت بردم توی netbeans اما این برنامه دارای چند تا import هستش چطور میتونم اون ها رو توی برنامه بیارم .ممنون از صبر ش شکیباییتون در خوندن و تو صبح سوال ها
کاربر میهمان
رضا شیخ زادهمن یک کاربر مهمان هستم
سلام
بسیار عالی و مفید،امیدوارم همیشه موفق و پیروز باشید.