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


پس از آشنایی با دستورات شرطی 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 بسازم و از طریق آن در پایگاه داده ذخیره کنم ؟ شما میتوانید منو راهنمایی کنید ؟
باتشکر
عبدالحمید ارجمند
عبدالحمید ارجمندAndroid Developer - Java - عاشق گجتهای اپل و مایکــ
طراحی UI با وجود IDE هایی مثل Eclipse ( بصورت عام ) و AndroidStudio ( مخصوص اندروید ) بسیار بسیار آسان شده و حتی میتوانید در طول یک هفته آن را فرابگیرید ، اما اگر گمان میکنید که تنها با طراحی UI میتوانید داده هایی را از کاربر گرفته و در یک دیتابیس ذخیره کنید ، نیاز است دیدگاه خود را تغییر دهید . برای این کار حداقل میبایست از دوره آماتوری خود در آموزش دیدن گذر کنید و به مباحثی پیشرفته تر اشراف داشته باشید ، حتی با پیشروی در همین آموزشهای جاوا تا انتها نیز نمیتواند به مراد خودتون برسید ، نیاز است بصورت تخصصی تر جلو بروید .

در پاسخ به

کاربر میهمان
کاربر میهمان
سلام. ممنون از اموزشتون.
در این برنامه ای که نوشتیم اگر کاربر عدد اعشاری یا کاراکتری وارد کنه برنامه crash میکنه؟ چطور میتونیم طوری بنویسیم که اگر اینطوری شد هم یک جوابی به کاربر بده جای اینکه crash کنه؟
عبدالحمید ارجمند
عبدالحمید ارجمندAndroid Developer - Java - عاشق گجتهای اپل و مایکــ
شما در سومین خط خود تعریف اینگونه تعریف کرده اید : int monthNumber = keyboardInput.nextInt(); ، ( منظور لاین 6 در این آموزش هست ) پس با نوشتن int به برنامه دستور میدهید که از کاربر int بگیرد ( int مخفف اینتیجر است که اعداد صحیح را شمامل میشود و نه مقدارهای اعضاری ) . اما پاسخ شما اینگونه است که باید : در همین خط ( خط 6 ) به جای int مقداری همانند double یا float قرار دهید ، در اینصورت کد شما بصورت مقابل خواهد شد : double monthNumber = keyboardInput.nextInt();

در پاسخ به

javad
javad
درود خداوند بر شما

واقعا خیلی کار درستین،خدا قوت
کاربر میهمان
کاربر میهمان
سلام میشه از این پروژه ها خروجی jar. گرفت یا exe. ممنون میشم اگه جواب بدید
عبدالحمید ارجمند
عبدالحمید ارجمندAndroid Developer - Java - عاشق گجتهای اپل و مایکــ
بصورت مستقیم این قابلیت وجود نداره ، بستگی داره شما برای چه پلتفرمی درحال برنامه نویسی هستید ، شما از این درسها جاوا را یاد میگیرید ، ممکن است از دستورات فراگرفته ی این آموزشها بر ای اندروید برنامه نویسید یا هر پلتفرم دیگیری ، درصورتی که شما برای اندروید برنامه بنویسید ، خروجی شما یک فایل APK که بر روی دستگاههای اندرویدی اعم از گوشی و ساعت و تلوزیون اجرا خواهد شد خواهد بود . پس کاملا بستگی دارد که در چه محیطی یا برای چه سیستم عاملی برنامه مینویسید . موفق باشید .

در پاسخ به

javad
javad
معذرت میخوام منظورم فایل های تمرین بود
تا یه جایی دانلود میشه بعد اخطار میده دوباره از اول شروع به دانلود میکنه
عبدالحمید ارجمند
عبدالحمید ارجمندAndroid Developer - Java - عاشق گجتهای اپل و مایکــ
بررسی شد ، حداقل این فایل تمرین در این زمان و برای بنده به راحتی و بدون مشکل قابل دانلود شدن است .

در پاسخ به

javad
javad
سلام
فایل های آموزشی خراب است لطفا درستش کنید
ادمین سایت
ادمین سایت
کاربر گرامی فایل چک شد و مشکلی نداشت

در پاسخ به

کاربر میهمان
کاربر میهمان
با تشکر از توضیحات خوبتان. من میخوام کدهای موجود در صفحه ی https://github.com/tdebatty/java-LSH#binning را در نت بینز اجرا کنم .لطفا راهنماییم کنید.
کاربر میهمان
کاربر میهمان
ممنون بابت توضیح خوبتان. من یه برنامه ای رو از یه سایت بردم توی netbeans اما این برنامه دارای چند تا import هستش چطور میتونم اون ها رو توی برنامه بیارم .ممنون از صبر ش شکیباییتون در خوندن و تو صبح سوال ها
ccc ccc
ccc ccc
سلام. import ها برای کلاس هایی استفاده میشه که در یک پکیج دیگه هستن. معمولا نیازی نیست که برنامه نویس خودش به صورت دستی پکیجی و import کنه. اگه از IDE استفاده کنید خودش این کار و انجام میده.
من دقیقا متوجه سوالتون نشدم. بیشتر توضیح بدین.

در پاسخ به

کاربر میهمان
کاربر میهمان
سلام
بسیار عالی و مفید،امیدوارم همیشه موفق و پیروز باشید.
کاربر میهمان
کاربر میهمان
ممنون بابت پاسخ گویی اما من با فهمیدن این شک کردم که من زبان مد نظرم رو می خونم یا نه من هدفم از یادگیری این زبان استفاده از اون در موتور بازی سازی conturstract 2 هست. می خواستم ببینم شما اطلاعاتی دارین که این زبان درسته اون موتور یا نه یا اصلا از این زبان برای بازی سازی تو متور های دیگه استفاده میشه؟
عبدالحمید ارجمند
عبدالحمید ارجمندAndroid Developer - Java - عاشق گجتهای اپل و مایکــ
راجع به بازی سازی توصیه بنده برای شما این هست که برای بازیهای بسیار بزرگ و حجیم از نرم افزار غول و بی رقیب UnrealEngine و برای بازیهای ابتدایی و کوچک از نرم افزار Unity استفاده کنید . این تجربه ای که به عرضتون رسوندم نتیجه ی تحقیقات بسیار زیادی است که روزها و ماهها به دنبال اون بودم و از اساتید بزرگی که در انجمنهای اونها حضور داشتم کسب کردم . اگه شما بخواید در شرکتهای بزرگ بازی سازی استخدام شوید باید مسلط به "آنریل انجین" باشید . زیرا آن شرکتها نمیخواهند درساخت بازیهایشان با محدودیت روبرو شوند و unity برای آنها محدودیت است . برعکس آن نرمافزار unrealEngin ضمن اینکه پلاگینهایی برای تولید بازی اندروید در اختیار شما گذاشته ، اما توسعه از طریق این نرم افزار برای دستگاههای اندرویدی معقول نیست و توصیه نمیشه . درصوتی که هدفی بزرگ در سر دراید خوب است که از طریق UnrealEngine پیش بروید زیرا در این بازی های کوچک ساخته اید و هم از راه خود منحرف نشده اید . موفق باشید .

در پاسخ به

کاربر میهمان
کاربر میهمان
سلام و ممنون بابت اموزش. میخواستم ببینم اگه من برنامه ای که نوشتم زخیره کنم و فایل . java به یک گوشی جاوا بزنم برنامه اجرا میشه؟
ccc ccc
ccc ccc
سلام. نه دوست عزیز اجرا نمیشه. جاوایی که بر روی گوشی نصب هست، JavaME هست و باید اون و یاد بگیرید.

در پاسخ به

محمد
محمد
شما خیلی باحالین
کاربر میهمان
کاربر میهمان
ممـــــــــــــــنون
سایتتون عـــالیه
C3css.com محمد قنبری
C3css.com محمد قنبری
سلام.آیا در این آموزش فقط با محیط کنسول کار میکنیم یا نه برای محیط شی گرایی هم آموزشی ترتیب میدید؟!
ادمین سایت
ادمین سایت
سلام
کلیه ی آموزش ها در محیط کنسول است.

با تشکر
ارادتمند
تیم سکان آکادمی

در پاسخ به

C3css.com محمد قنبری
C3css.com محمد قنبری
پس یعنی جاوا شی گرا نیست؟؟برنامه نوسیی اندروید مگر با این نرم افزار تولید نمی شه؟اندروید که همش شی گرایی هست!!!!

در پاسخ به

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

در پاسخ به

برنامه نویس مبتدی
برنامه نویس مبتدی
ممنون میشم اگه جواب بدید
ادمین سایت
ادمین سایت
سلام
اشکالاتی در آموزش های قبلی وجود داشته که در این دوره قرار است رفع شوند. پس از این که کلیه ی اموزش ها به این شکل روی سایت قرار گرفت، سپس به رفع اشکال آن ها خواهیم پرداخت.

با تشکر
ارادتمند
تیم سکان آکادمی

در پاسخ به

برنامه نویس مبتدی
برنامه نویس مبتدی
سلام خیلی خیلی ممنونم بابت آموزش هاتون دستتون درد نکنه واقعا
یه سوال داشتم من قبلا آموزش های pdf شما رو دانلود کردم خواستم بپرسم این آموزشا که داره تالیف میشه عینا همون آموزشاس؟ینی نه کمتر نه بیشتر؟لطفا اگه کوچکترین تغییری کرده بهم اطلاع بدین در ضمن اگه تغییر نکرده آموزش ها به همون ترتیب pdf پیش رفته یا جابه جایی هم صورت گرفته؟