آشنایی با دستورات شرطی تودرتو در زبان برنامه‌نویسی جاوا


در آموزش‌های گذشته با دستورات شرطی if و else آشنا شدیم و گفتیم که در صورت برقرار بودن شرط تعریف‌شده در برنامه، دستورات مرتبط با if و در غير اين صورت دستورات داخلی else اجرا می‌شوند. حال در این آموزش قصد داریم تا با دستور شرطی دیگری تحت عنوان else if و کاربرد آن‌ آشنا شده و همچنین به تشریح نحوۀ پیاده‌سازی چند دستور شرطی به صورت تودرتو بپردازیم.

آشنایی با دستور else if در زبان جاوا

برای شروع، ابتدا پروژه‌ای تحت عنوان NestedIfStatement ایجاد کرده سپس کلاسی با نام ElseIf در آن می‌سازیم. به علاوه، برای درک بهتر موضوع بحث این آموزش نیاز به یک سناریو داریم بدین صورت که فرض کنیم که می‌خواهیم برنامه‌ای طراحی کنیم تا بر اساس برخی اطلاعات دانشجویان همچون میزان هوش و معدل ترم قبل ایشان درصد تخفیفی را برای شهریۀ دانشگاهی آن‌ها محاسبه کند.

برای پیاده‌سازی سناریوی فوق نیاز به تعریف دو متغیر داریم تا مقادیر مربوط به بهرهٔ هوشی و همچنین معدل ترم قبل دانشجو را در هر یک از متغیرها نگهداری کنیم. همچنین جهت تعریف متغیرهای مذکور از دیتا تایپ double استفاده می‌کنیم چرا که ممکن است هر یک از اعداد مرتبط با میزان هوش یا معدل ترم قبل دانشجو به صورت اعشاری باشند.

نکته
نوع دادۀ float نیز به منظور ذخیره و نگهداری اعداد اعشاری مورد استفاده قرار می‌گیرد اما دقت دیتا تایپ double بیشتر است.

بنابراین متغیرهای مورد نیاز خود را تعریف کرده و بدین ترتیب کدی به شکل زیر خواهیم داشت:

public class ElseIf {
    public static void main(String[] args) {
        double intelligenceQuotient = 100;
        double termMean = 17.3;
    }
}

در کد فوق، با استفاده از دیتا تایپ double دو متغیر تحت عناوین intelligenceQuotient و termMean تعریف کرده و به ترتیب اعداد 100 و 17/3 را به هر یک اختصاص داده‌ایم. در ادامه، جهت محاسبۀ تخفیف متناسب با میزان هوش و معدل دانشجو نیاز به استفاده از دستورات شرطی داریم و از همین روی کد فوق را به صورت زیر تکمیل می‌نماییم:

public class ElseIf {
    public static void main(String[] args) {
        double intelligenceQuotient = 100;
        double termMean = 17.3;
        if (intelligenceQuotient > 110 && termMean > 18) {
            System.out.println("You have 30 percent discount.");
        } else if (intelligenceQuotient > 100 && termMean > 17) {
            System.out.println("You have 20 percent discount.");
        } else {
            System.out.println("You have no discount.");
        }
     }
}

در کد فوق، ابتدا دستور if را با استفاده از عملگر && بدین صورت تعریف کرده‌ایم که چنانچه مقدار منتسب به متغیر intelligenceQuotient بزرگ‌تر از 110 بوده و همچنین مقدار اختصاص‌یافته به متغیر termMean نیز بزرگ‌تر از 18 باشد، شرط كلی true بوده و در نتیجه دستورات مرتبط با آن اجرا می‌شوند که در اینجا استرینگ «.You have 30 percent discount» در کنسول چاپ می‌شود بدین معنی که چنانچه میزان هوش دانشجو بالاتر از 110 و همچنین معدل ترم پیش وی بالاتر از 18 باشد، میزان تخفیف ٪۳۰ بر شهریۀ دانشگاهی او اِعمال می‌گردد. 

در ادامه، از دستور else if استفاده کرده‌ایم و نحوۀ کار این دستور شرطی بدین صورت است که چنانچه شرط تعیین‌شده در دستور if برقرار نباشد، شرط تعریف‌شده در دستور else if بررسی می‌شود که در صورت true بودن شرط مذکور، دستورات مرتبط با آن اجرا می‌گردند و در غیر این صورت دستورات مرتبط با else اجرا می‌شوند. بنابراین در کد فوق، اگر مقادیر اختصاص‌یافته به متغیرهای intelligenceQuotient و termMean به ترتیب بزرگ‌تر از 110 و بزرگ‌تر از 18 نباشند،‌ شرط دستور else if بررسی می‌شود تا اگر مقدار متغير intelligenceQuotient بزرگ‌تر از 100 و مقدار متغير termMean بزرگ‌تر از 17 باشد، شرط برقرار بوده و دستور داخلی آن مبنی بر چاپ استرینگی به صورت «.You have 20 percent discount» اجرا شود و در غیر این صورت هم دستورات داخلی else اجرا شده و استرینگ «.You have no discount» در کنسول چاپ گردد. حال برنامۀ فوق را اجرا می‌کنیم و در خروجی خواهیم داشت:

You have no discount.

با اجرای برنامۀ فوق، اعداد 100 و 17/3 به ترتیب به متغیرهای intelligenceQuotient و termMean اختصاص یافته و دستور if چک می‌شود که مقادیر منتسب به هر یک از متغیرهای مذکور به ترتیب بزرگ‌تر از 110 و 18 می‌باشد یا خیر که شرط برقرار نبوده و در ادامه شرط تعیین‌شده در دستور else if بررسی می‌شود بدین صورت که مقادیر منتسب به متغیرهای مذکور به ترتیب بزرگ‌تر از 100 و 17 است یا خیر که در اینجا مقدار اختصاص‌یافته به متغیر intelligenceQuotient بزرگ‌تر از 100 نبوده از همین روی شرط کلی false ارزیابی شده و در نتیجه مفسر به سراغ اجرای دستورات مرتبط با else می‌رود و در نهایت استرینگ «.You have no discount» در کنسول چاپ می‌شود (با تغییر مقادیر منتسب به هر یک از متغیرهای مذکور می‌توانیم کلیۀ دستورات شرطی برنامه را مورد بررسی قرار دهیم.)

به خاطر داشته باشید
در زبان برنامه‌نویسی جاوا می‌توان به تعداد دلخواه از دستورات else if در برنامه استفاده کرد که در نهایت نیز دستور else درج می‌شود تا در صورت برقرار نبودن شرط if و همچنین کلیۀ شروط تعیین‌شده در دستورات esle if، دستور مرتبط با else اجرا شود.

حال فرض کنیم که شرایط اِعمال تخفیف بر شهریۀ دانشجویان را تغییر می‌دهیم بدین صورت که دانشجویانی که میزان هوش بیش از 110 یا معدلی بالاتر از 18 دارند، تخفیف ٪۳۰ دریافت کرده و دانشجویانی که میزان هوش بیش از 100 یا معدلی بالاتر از 17 دارند نیز ٪۲۰ تخفیف دریافت می‌کنند (بدیهی است که برای  دانشجویانی که هیچ از یک شرایط فوق را ندارند، تخفیفی در نظر گرفته نمی‌شود.) در این مرحله برای پیاده‌سازی سناریوی جدید نیاز است تا کد برنامه را به صورت زیر بازنویسی نماییم: 

public class ElseIf {
    public static void main(String[] args) {
        double intelligenceQuotient = 100;
        double termMean = 17.3;
        if (intelligenceQuotient > 110 || termMean > 18) {
            System.out.println("You have 30 percent discount.");
        } else if (intelligenceQuotient > 100 || termMean > 17) {
            System.out.println("You have 20 percent discount.");
        } else {
            System.out.println("You have no discount.");
        }
    }
}

در کد فوق از عملگر || برای تعریف شرط برنامه استفاده کرده‌ایم که در آن گفته‌ايم چنانچه مقدار منتسب به متغير intelligenceQuotient بالاتر از 110 يا مقدار اختصاص‌يافته به متغير termMean بزرگ‌تر از 18 باشد، شرط كلی true ارزیابی شده و دستورات داخلی آن اجرا شده و استرینگ «.You have 20 percent discount» در کنسول چاپ می‌گردد اما در صورت برقرار نبودن دستور if دستور else if ارزیابی می‌شود تا اگر مقادیر منتسب به متغیرهای مذکور به ترتیب بالاتر از 100 یا بزرگ‌تر از 17 بودند، شرط مورد نظر true ارزیابی شده و دستورات داخلی آن مبنی بر چاپ استرینگی به صورت «.You have 20 percent discount» اجرا شده و در غیر این صورت هم دستورات داخلی else اجرا می‌گردد و در نهایت استرینگ مربوطه در کنسول نمایش داده می‌شود. بنابراین با اجرای کد فوق در خروجی خواهیم داشت:

You have 20 percent discount.

همان‌طور که می‌بینیم، دانشجویانی که در برنامۀ پیشین هیچ تخفیفی دریافت نمی‌کردند، با اِعمال شرایط جدید شامل ٪۲۰ تخفیف می‌شوند بدین معنی که اگر دانشجویی تنها یکی از شرایط میزان هوش بالای 110 یا معدل بالای 18 داشته باشد، تخفیف مد نظر را دریافت می‌کند اما در صورتی که معدلی بیشتر از 17 (و در عین حال کمتر از 18) یا میزان هوشی بیشتر 100 (و در عین حال کمتر از 110) داشته باشد، به مقدار ٪۲۰ تخفیف دریافت می‌کند و در نهایت فردی که هیچ یک از شرایط فوق را نداشته باشد، تخفیفی بر شهریۀ دانشگاهی‌اش اِعمال نمی‌گردد.

آشنایی با دستورات شرطی تودرتو در زبان جاوا

در قسمت پایانی این آموزش به توضیح Nested If Statements یا دستورات شرطی تودرتو می‌پردازیم. به طور کلی، دستورات شرطی تودرتو به یکسری دستور if و else تعریف‌شده داخل دستورات شرطی دیگر گفته می‌شود که در صورت برقرار نبودن برخی شرایط خاص بررسی شده و دستورات داخلی آن‌ها اجرا می‌گردند.

برای درک بهتر نحوۀ پیاده‌سازی دستورات شرطی تودرتو، سناریویی جدید در نظر می‌گیریم بدین صورت که سن کاربر را در برنامه تعریف کرده و بررسی می‌کنیم تا ببینیم چنانچه سن فرد بالاتر از 40 بود، استرینگی در قالب پیغام «سن شما بالاتر از 40 است» در کنسول نمایش داده شود و در غیر این صورت مجدداً شرطی تعریف می‌کنیم تا ببینیم چنانچه سن فرد کمتر از 20 بود، پیغام «سن شما کمتر از 20 است» و در غیر این صورت استرینگی مبنی بر «سن شما بالاتر از 20 است» در معرض دید وی قرار گیرد که برای پیاده‌سازی چنین سناریویی یک کلاس جدید تحت عنوان NestedIf داخل پروژۀ NestedIfStatement می‌سازیم که در ابتدا کدی به صورت زیر خواهیم داشت بدین صورت که با به‌کارگیری دیتا تایپ int متغیری تحت عنوان age تعریف کرده و عدد 30 را بدان منتسب نموده‌ایم:

public class NestedIf {
    public static void main(String[] args) {
        int age = 30;
    }
}

حال می‌باید شرطی بدین صورت تعریف کنیم که چنانچه سن فرد بیش از 40 بود، شرط برقرار بوده و استرینگی متناسب با آن در کنسول چاپ گردد و در غیر این صورت استرینگی مبنی بر پایین‌تر بودن سن فرد از مقدار 40 سال در کنسول نمایش داده شود که برای این منظور کد خود را به صورت زیر تکمیل می‌کنیم:

public class NestedIf {
    public static void main(String[] args) {
        int age = 30;
        if (age > 40) {
            System.out.println("You are older than 40.");
        } else {
            System.out.println("You are not older than 40.");
        }
    }
}

در کد فوق یک دستور شرطی تعریف کرده‌ایم تا مقدار منتسب به متغیر age را بررسی کند و چنانچه مقدار متغیر مذکور بیش از 40 بود، شرط برقرار بوده و دستورات داخلی آن اجرا می‌شود که در اینجا گفته‌ایم استرینگ «.You are older than 40» در کنسول نمایش داده شود و در غیر این صورت دستورات داخلی else اجرا شده و استرینگی در قالب عبارت «.You are not older than 40» در کنسول چاپ شود. بنابراین با اجرای برنامۀ فوق خواهیم داشت:

You are not older than 40.

در واقع، با اجرای کد فوق، مقدار عدد 30 به متغیر age اختصاص یافته و در ادامه دستور if بررسی می‌شود که اگر مقدار متغیر مذکور بالاتر از 40 بود، استرینگ «.You are older than 40» در کنسول چاپ شود اما از آنجایی که مقدار متغیر age برابر با عدد 30 است، دستور if برابر با مقدار بولین false ارزیابی شده و دستورات مرتبط با else اجرا شده و استرینگ فوق در کنسول نمایش داده می‌شود.

در این مرحله به پیاده‌سازی بخش دوم سناریوی خود می‌پردازیم تا در صورتی که سن فرد کمتر از 40 سال بود، شرطی دیگر تعریف کنیم و بدین ترتیب بررسی کنیم تا ببینیم چنانچه سن فرد بالاتر از 20 سال است، استرینگی متناسب با آن و در غیر این صورت استرینگ دیگری را در کنسول نمایش دهیم که برای این منظور بخش مربوط به دستورات else از کد فوق را به صورت زیر تغییر می‌دهیم:

public class NestedIf {
    public static void main(String[] args) {
        int age = 30;
        if (age > 40) {
            System.out.println("You are older than 40.");
        } else {
            System.out.println("You are not older than 40.");
            if (age < 20) {
                System.out.println("You are under 20.");
            } else {
                System.out.println("You are over 20.");
            }
        }
     }
}

با این تفاسیر، در صورتی که شرط مربوط به دستور if برقرار نباشد، دستورات مرتبط با else اجرا می‌شوند که بدین ترتیب استرینگ «.You are not older than 40»‌ چاپ شده و در ادامه یک دستور شرطی دیگر بررسی می‌گردد تا اگر مقدار منتسب به متغیر age بیشتر از 20 باشد، شرط true بوده و دستورات داخلی آن اجرا شوند و بدین ترتیب استرینگ «.You are under 20» و در غیر این صورت استرینگ «.You are over 20» در کنسول نمایش داده شود که با اجرای برنامۀ فوق در خروجی خواهیم داشت:

You are not older than 40.
You are over 20.

همان‌طور که می‌بینیم، شرط تعریف‌شده در دستور if برقرار نبوده و دستورات else اجرا می‌شوند که از همین روی در ابتدا استرینگ «.You are not older than 40»‌ در کنسول چاپ شده و در ادامه مجدداً بررسی می‌شود تا اگر مقدار متغیر age کمتر از 20 است، استرینگ مربوطه در کنسول نمایش داده شود اما مقدار منتسب به متغیر مذکور در مثال فوق برابر با عدد 30 می‌باشد و از همین روی شرط if برقرار نبوده و دستورات مرتبط با else اجرا شده و استرینگ مرتبط با آن در خروجی چاپ می‌گردد.

دانلود فایل‌های تمرین


بهزاد مرادی

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
کاربر میهمان
Akplayerمن یک کاربر مهمان هستم
۱۳۹۵/۰۴/۱۴
سلام و تشکر از زحماتتون
من برای درک بهتر این مبحث رو با مبحث Scanner ها قاطی کردم این شد:
import java.util.Scanner;

public class NestedIfC {

public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("insert your IQ");
System.out.println("insert your Termmean");
Scanner IQ = new Scanner(System.in);
Scanner termMean = new Scanner(System.in);

if (IQ.nextDouble() 110 || termMean.nextDouble() 18) {
System.out.println("you have 30% discount");
} else if (IQ.nextDouble() 100 || termMean.nextDouble() 17) {
System.out.println("you have 15% discount");
} else {
System.out.println("you don't have any discount");
}


}

}
حالا اگه if اول جواب نده 2باره باید عدد بدم چرا؟
کاربر میهمان
Titanمن یک کاربر مهمان هستم
۱۳۹۵/۰۴/۰۶
سلام.اینجا مثال آوردین که چه جوری میشه یک دستور شرطی رو داخل یه دستور شرطی دیگه استفاده کرد.حالا اگه بخوایم دو تا دستور شرطی A و B رو داخل یه دستور شرطی استفاده کنیم, شرط B رو به چه شکل باید بیاریم؟
mohammad saberi
mohammad saberi
۱۳۹۵/۰۳/۱۵
بسیار ساده و روان..
کاربر میهمان
پژمانمن یک کاربر مهمان هستم
۱۳۹۵/۰۳/۱۰
خیلی عالی هست لطفا دوره advanced هم بزارین من که حاضرم هزینش رو هم بدم
Mahmood
Mahmood
۱۳۹۵/۰۲/۱۵
واقعا آموزشاتون عالیه
فقط اگه پایان هر درس یا هر فصل یه تمرین میذاشتید که خودمون رو محک بزنیم عالی تر میشد
ممنون میشم در مورد این پیشنهاد فکر کنید
کاربر میهمان
هادیمن یک کاربر مهمان هستم
۱۳۹۴/۱۱/۱۳
با عرض سلام
آموزش ها بسیار بسیار بسیار دقیق ریز و ساده و با توضیح بسیار فراوان هستند در حدی که من حوصله ام نمیاد بخونمشون :))
البته دلیلش هم آشنایی با زبان ++c و #c هست
ولی در کل عالی هستید امیدوارم مباحث که پیش بره و تخصصی تر بشه جذابیتش هم برام بیشتر بشه .
موفق و موید باشید در پناه الطاف حق ;-)
عیسی پور
عیسی پور
۱۳۹۴/۰۹/۱۰
موفق و پایدار باشید