نحوه ی به کارگیری کلاس استرینگ در دستورات سوییچ در زبان جاوا


پس از آشنایی با نحوه به کارگیری متغیر char به همراه switch در این آموزش قصد داریم تا به بررسی این مطلب بپردازیم که چگونه می توان کلاس String را به همراه دستورات شرطی switch مورد استفاده قرار داد. همچون روال گذشته، قصد داریم تا به منظور درک بهتر مطالب آموزشی یک سناریو تعریف کنیم که در آن برنامه ای کاربردی از ادغام String و switch خواهیم نوشت.

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

نکته ای که پیش از شروع آموزش می بایست حتماً مد نظر قرار دهیم این است که به کاری گیری string ها در switch در نسخه 7 جاوا امکان پذیر شده است. بنابراین ما برای طراحی این نرم افزار نیاز داریم تا از قبل نسخه JDK 7 را نصب کرده باشیم. برای این که اطمینان حاصل کنیم که نسخه 7 جاوا روی سیستم ما نصب است، به کنترل پنل رجوع کرده و روی آیکان Java کلیک می کنیم. سپس پنجره ای همچون پنجره زیر نمایان خواهد شد:

در پنجره فوق روی دکمه About کلیک نموده سپس پنجره بعدی به شکل زیر ظاهر می شود:

در این پنجره به وضوح نسخه جاوا نصب شده روی سیستم مشخص می باشد. حال که از نصب نسخه جاوا 7 روی سیستم مطمئن شدیم نوبت به تنظیم محیط برنامه نویسی اکلیپس برای استفاده از جاوا 7 می رسد. در واقع ما می توانیم به طور هم زمان چندین نسخه جاوا را روی سیستم خود داشته باشیم فقط نکته ای که نمی بایست فراموش کنیم این است که به اکلیپس دستور دهیم از کدام نسخه استفاده کند (به منظور دستور دادن به محیط برنامه نویسی اکلیپس برای استفاده از نسخه ی خاصی از JDK به بخش آموزشی ابزارهای برنامه نویسی با زبان جاوا مراجعه نمایید.) ایجاد یک پروژه برای این آموزش با ایجاد پروژه برای آموزش های پیشین کمی متفاوت است. در واقع همان طور که در تصویر زیر قابل مشاهده است، در پنجره ای که برای ساخت یک پروژه جدید جاوا باز می شود می بایست از میان نسخه های JRE موجود نسخه 7 را انتخاب کنیم:

پس از انتخاب نامی  به عنوان نام پروژه خود دکمه Finish را زده و سپس همان طور که قبلاً آموزش داده شده است یک کلاس جدید تحت عنوان CityCode به معنی "کد شهر" در آن ایجاد می کنیم. برای آن که بتوانیم به صورت دینامیک مقادیر string را وارد کنیم می بایست از کلاس Scanner استفاده نماییم. حال کد نیمه تکمیل ما به شکل زیر خواهد بود:

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

در کد فوق ما یک Instance یا "نمونه" از کلاس Scanner ایجاد کرده و نام آن را keyboardInput به معنی "ورودی کیبورد" گذاشته ایم. سپس یک شیء از روی کلاس String ایجاد کرده و نام آن را cityName به معنی "نام شهر" می گذاریم. در این مرحله به جای آن که مقداری برای کلاس String تعریف کنیم، دستور می دهیم تا با استفاده از کلاس Scanner هر آنچه که از طریق کیبورد وارد برنامه شد به شیء ساخته شده از روی کلاس String ما اختصاص یابد. در واقع متد ()next این وظیفه را دارا است تا ورودی هایی از هر جنس را از کیبورد دریافت کند. سپس نیاز است تا switch را به شکلی تعریف کنیم که مقدار شیء ساخته شده از روی کلاس String را گرفته و بر اساس آن نام شهر مرتبط را روی صفحه نمایش نشان دهد. برای این منظور کد فوق را به شکل زیر تکمیل می کنیم:

import java.util.Scanner;
public class CityCode {
    public static void main(String[] args) {
        System.out.print("Please Type the Name of the City ");
        Scanner keyboardInput = new Scanner(System.in);
        String cityName = keyboardInput.next();
        switch (cityName) {
            case "mashhad" :
            System.out.println("Mashhad Code Is 0511");
            break;
            case "arak" :
            System.out.println("Arak Code Is 0861");
            break;
            case "abadan" :
            System.out.println("Abadan Code Is 0631");
            break;
            case "tehran" :
            System.out.println("Tehran Code Is 021");
            break;
            case "amol" :
            System.out.println("Amol Code Is 0121");
            break;
            case "chabahar" :
            System.out.println("Chabahar Code Is 0545");
            break;
            case "sanandaj" :
            System.out.println("Sanandaj Code Is 0871");
            break;
            default :
            System.out.println("Sorry, This City Is Not Defined!");
            break;
        }
    }
}

در حقیقت از آنجا که می خواهیم دستور switch مقدار شیء ساخته شده از روی کلاس String را مورد سنجش قرار دهد، می بایست داخل پرانتز مقابل switch نام شیئ که از روی کلاس String ساختیم یا همان cityName را وارد کنیم. اکنون به منظور روشن تر شدن کد فوق به طور نمونه یکی از case ها را مورد بررسی قرار می دهیم. اولین گزینه که :"case "mashhad نام دارد حاکی از این شرط است که ببیند آیا مقدار داده ورودی از طریق کیبورد معادل با واژه ی mashhad است یا خیر، چنانچه پاسخ به این شرط true بود سپس دستور ;("System.out.println("Mashhad Code Is 0511 مبنی بر نوشتن جمله Mashhad Code Is 0511 به معنی "کد مشهد 0511 است" اجرا خواهد شد و در نهایت به دستور break می رسد که بدان معنا است که از برنامه خارج شود. حال اگر داده ورودی معادل با این شرط نبود، شروط قرار گرفته در این switch یکی پس از دیگری اجرا می شوند و چنانچه هیچ کدام از case ها معادل با داده ورودی نبود، دستور default اجرا خواهد شد. به عنوان نمونه برنامه را اجرا می کنیم و شهر اراک را وارد کرده و دکمه اینتر را می زنیم (توجه نمایید که کلمه اراک با حرف کوچک تایپ شده است):

خواهیم دید که برنامه به درستی پاسخ ما را خواهد داد. حال اگر شهری را بزنیم که در لیست وارد نشده است، برنامه گزینه default را اجرا خواهد کرد. به مثال زیر توجه کنید:

می بینیم که عبارت !Sorry, This City Is Not Defined به معنی "متاسفیم، کد این شهر وارد برنامه نشده است!" در کنسول نشان داده خواهد شد. اگر توجه کرده باشید در مثالی که شهر اراک را وارد کردیم واژه arak به این شکل نوشته شده است که حرف اول آن کوچک است. حال ببینیم اگر نام این شهر را با حرف بزرگ بنویسیم چه اتفاقی خواهد افتاد:

می بینیم که برنامه نمی تواند تشخیص دهد که واژه Arak در عالم واقعیت همان arak است و این دو را دو Entity یا "هویت" مجزا می شناسد. برای رفع این مشکل یا می توانیم از کاربر خود بخواهیم که نام شهر خود را با حرف کوچک حتماً شروع کند و یا یک تغییر جزئی کوچک در برنامه خود ایجاد کنیم. از آنجا که گزینه دوم هم اصولی تر است و هم بار آموزشی دارد ما گزینه دوم را انتخاب خواهیم کرد.

در واقع با اضافه

کردن ;()cityName = cityName.toLowerCase پس از جایی که یک شیء از روی کلاس String تعریف کرده ایم، این دستور را به برنامه خود می دهیم که مقدار شیء ساخته شده از روی کلاس String برنامه ما که cityName نام دارد می بایست به هر شکلی که وارد برنامه شود در نهایت به حروف کوچک تبدیل شود. به عبارت دیگر می گوییم که کلاس cityName عبارت است از ;()cityName.toLowerCase یعنی یک cityName که حروف آن همگی کوچک شده باشند و از آنجا که حروف واژگانی که در switch تعریف شده اند همگی کوچک هستند (مثل mashhad) برنامه با هیچ گونه مشکلی مواجه نخواهد شد. اکنون کد ما می بایست به شکل زیر درآید:

import java.util.Scanner;
public class CityCode {
    public static void main(String[] args) {
        System.out.print("Please Type the Name of the City ");
        Scanner keyboardInput = new Scanner(System.in);
        String cityName = keyboardInput.next();
        cityName = cityName.toLowerCase();
        switch (cityName) {
            case "mashhad" :
            System.out.println("Mashhad Code Is 0511");
            break;
            case "arak" :
            System.out.println("Arak Code Is 0861");
            break;
            case "abadan" :
            System.out.println("Abadan Code Is 0631");
            break;
            case "tehran" :
            System.out.println("Tehran Code Is 021");
            break;
            case "amol" :
            System.out.println("Amol Code Is 0121");
            break;
            case "chabahar" :
            System.out.println("Chabahar Code Is 0545");
            break;
            case "sanandaj" :
            System.out.println("Sanandaj Code Is 0871");
            break;
            default :
            System.out.println("Sorry, This City Is Not Defined!");
            break;
        }
    }
}

به عنوان نمونه شهر دیگری را امتحان می کنیم:

در مثال فوق می بینیم که شهر چابهار به شکل chaBaHaR نوشته شده است اما از آنجا که متد ()toLowerCase کلیه حروف را به حروف کوچک تبدیل می کند می توانیم این اطمینان را داشته باشیم که واژه chaBaHaR به chabahar تبدیل شده که جواب شرط ;"case "chabahar به آن نیز true خواهد بود.

هشدار

با توجه به این که تالیف این دوره ی آموزشی پیش از تغییر در پیش شماره های شهرهای ایران صورت گرفته است، پیش شماره ها با پیش شماره های جدید کمی تفاوت دارند. به طور مثال، در این آموزش پیش شماره ی شهر اراک 0861 است اما این در حالی است که هم اکنون پیش شماره ی این شهر 0863 می باشد.

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
shirin hosseini
shirin hosseini
سلام
میشه توضیح بدین فرق بین دستور String و char چی هست؟ با هر دوشون میشه کاراکتر رو وارد برنامه کرد. چرا این برنامه رو با char ننوشتید؟ اگه جاوای 7 نداشته باشیم میتونیم این برنامه رو با char بنویسیم یا حتما باید با String نوشته بشه؟؟؟
ali15fool4
ali15fool4
ایا میشه با جاوا ویندوز یا اندروید رو هک کرد؟
Nirvana
Nirvana
ببخشید منظورم شهر دوکلمه ای بود که به اشتباه نوشتم دو حرفی. بعد از اینکه گزینه Khorram Abad رو همراه با کد شهر به دستورات switch اضافه کردیم, حالا برنامه رو اجرا کنین و Khorram Abad رو بنویسین. این اشکال به دلیل نحوه عملکرد متد next هست که تو این آموزش https://sokanacademy.com/courses/java/1375/%D9%86%D8%AD%D9%88%D9%87-%DB%8C-%D8%AA%D8%B9%D8%B1%DB%8C%D9%81-%D9%86%D9%88%D8%B9-%D9%88%D8%B1%D9%88%D8%AF%DB%8C-%DA%A9%D9%84%D8%A7%D8%B3-%D8%A7%D8%B3%DA%A9%D9%86%D8%B1-%D8%AF%D8%B1-%D8%B2%D8%A8%D8%A7%D9%86-%D8%AC%D8%A7%D9%88%D8%A7 در مورد اون توضیح داده شده.
Nirvana
Nirvana
آقای مرادی برنامه ای که نوشته اید یک اشکال جزیی دارد. البته خود این کدهایی که نوشته اید مشکلی ندارند و برنامه به درستی اجرا میشود و خروجی مورد انتظار را نیز بیرون میدهد. اما یک سناریو را در نظر بگیرید: فرض کنید داخل دستور switch یک شهر دوحرفی مثلا Khorram Abad را تعریف کنیم و یک کد شهر به آن اختصاص دهیم بدون این که بقیه کدها را تغیری بدهیم. حدس بزنین چی میشه؟
MOHAMMAD
MOHAMMAD
عالی بود
کاربر میهمان
fatemeمن یک کاربر مهمان هستم
عاااااااااااالی!
fthp
fthp
سلام
من میخوام از کاربر فقط یک کاراکتر بگیرم نه رشته.یعنی کاربر باید جنسیت رو معین کنه و فقط یه کاراکتر وارد کنه
از چه دستوری استفاده کنم؟
fthp
fthp
عالی بود
M-Yall
M-Yall
سلام و خسته نباشید،من تو درس قبل مشکلی با سوییچ نداشتم،اما تو این درس از من ایراد میگیره،Syntax error فقطم از قسمت سوییچ به بعد.و وقتی ماوسو نگه میدارم این پیشنهاد و پیغامو میده.
The method Switch(String) is undefined for the type Code
Create method switch 'String'
کاربر میهمان
Titanمن یک کاربر مهمان هستم
نه.شما اون upperCase و lowerCase رو فاکتور بگیرین. در کل منظورم ساختار کد هست.