استفاده از چندین دستور شرطی در کنار یکدیگر


پس از آشنایی با مقدمات دستورات شرطی، حال نوبت با آشنایی با Nested If Statement ها، Else if و مورد بررسی قرار دادن چندین شرط در کنار یکدیگر می رسد که در این آموزش کلیه این موارد مورد بررسی قرار خواهند گرفت.

برای شروع این آموزش نیاز داریم تا پروژه ای تحت عنوان NestedIf ایجاد کرده سپس کلاسی با نام NestedIfStatement در آن ایجاد کنیم (در واقع هدف از انتخاب این نام صرفاً مرتبط بودن با موضوع آموزش است.) برای درک بهتر موضوع آموزش این بخش نیاز به یک سناریو داریم که از این قرار است:

فرض کنیم که می خواهیم برنامه ای طراحی کنیم که شهریه دانشگاه را بر اساس معیارهای خاصی تعیین کند. در واقع در این برنامه از دانشجویان می خواهیم تا اطلاعات خود را وارد کرده و برنامه بر اساس اطلاعات ورودی ایشان یک درصد تخفیف شهریه ترمیک را برای هر دانشجو در نظر بگیرد. در این برنامه دو عنصر میزان IQ و معدل ترم قبل سنجیده شده و بر آن اساس میزان درصد تخفیف محاسبه خواهد شد.

برای این منظور نیاز داریم تا دو متغیر یکی برای IQ و دیگری برای معدل ترم قبل ایجاد کنیم ولی از آنجا که ممکن است مقادیر این متغیرها رند نباشند از متغیری از جنس double استفاده می کنیم که می تواند اعداد اعشاری را در خود جای دهد

نکته
لازم به ذکر است که از متغیری از جنس float هم می توان برای اعداد اعشاری استفاده کرد اما نکته اینجا است که دقت متغیر double بیشتر است.

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

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

در کد فوق متغیر اول تحت عنوان intelligenceQuotient دارای مقدار 100 بوده و متغیر دوم تحت عنوان termMean دارای مقداری معادل با 17.3 می باشد (واژه ی IQ مخفف واژگان Intelligence Quotient به معنی "میزان هوش" بوده و نام termMean از واژگان term به معنی "ترم" و mean به معنی "میانگین" تشکیل شده است.) در ادامه، کد خود را به شکل زیر تکمیل می کنیم:

public class NestedIfStatement {
    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 نوشته شده است حاوی علامت && می باشد که در زبان برنامه نویسی جاوا به معنی "و" می باشد (این علامت مابین برنامه نویسان تحت عنوان Ampersand شناخته می شود.) به طور خلاصه، ما در این شرط دستور می دهیم که اگر IQ بیش از 110 بود "و" میانگین ترمی بیش از 18 بود دستور  ;(".System.out.println("You have 30 percent discount که به معنای "شما 30 درصد تخفیف دارید." اجرا گردد.

در ادامه، به بررسی دومین نکته ی جدید در کد فوق می رسیم که عبارت است از else if که به طور خلاصه به معنای "و یا این که اگر" می باشد. شرطی که برای else if در نظر گرفته شده است حاکی از آن است که اگر IQ بیش از 100 بود "و" میانگین ترمی بیش از 17 بود

دستور ;(".System.out.println(“You have 20 percent discount که به معنای "شما 20 درصد تخفیف دارید." اجرا گردد.

نکته ای که در اینجا می بایست مد نظر قرار داده شود این است که ما به هر تعداد که نیاز داشته باشیم می توانیم از شروط else if در برنامه خود استفاده کنیم. در نهایت یک شرط else قرار می دهیم مبنی بر این که اگر کلیه شروط فوق چه از if گرفته چه از هر تعداد else if که داشته باشیم دارای جواب false بودند، دستور قرار گرفته در else اجرا خواهد شد که در مثال فوق معادل با ;(".System.out.println(“You have no discount به معنای "به شما هیچ تخفیفی تعلق نمی گیرد." می باشد. اگر کد فوق را اجرا کنیم با نتیجه ای مشابه تصویر زیر رو به رو خواهیم شد:

در واقع از آنجا که میزان IQ معادل با 100 است و میزان معدل معادل با 17.3 است مسلماً دستور شرط if که اجرا نخواهد شد چرا که در شرط آمده است که میزان IQ بیش از 110 باشد و میزان معدل بالای 18 باشد. از سوی دیگر دستور شرط else if هم دارای جواب false خواهد بود چرا که میزان IQ در نظر گرفته شده بیش از 100 است و این در صورتی است که میزان IQ در متغیر ما خود عدد 100 است و دیگر این که میزان معدل بالای 17 در نظر گرفته شده است (اگر چه که شرط در مورد معدل دارای جواب true است، اما از آنجا که ما در شرط خود قید کرده ایم که هم جواب شرط IQ "و" هم جواب شرط معدل بایستی true باشند، پس این شرط در کل false خواهد شد.) در نهایت وقتی جواب به شروط if و else if معادل با false باشد، برنامه به سراغ آخرین گزینه که else می باشد می رود و هر دستوری که در آن باشد را اجرا خواهد کرد. با تغییر مقادیر متغیرهای این برنامه خواهیم توانست کلیه شروط برنامه را مورد بررسی قرار دهیم.

یکی از نکات جدیدی که در این آموزش مورد بررسی قرار گرفت استفاده از علامت && به معنای "و" در داخل شرط بود. حال زمانی را تصور کنیم که روسای دانشگاه تصمیم گرفته اند تا کمی در مورد سیاست تخفیف شهریه سهل گیرتر عمل کنند و برای همین منظور گفته اند که اگر کسی بخواهد که 30 درصد تخفیف بگیرد یا بایستی دارای IQ بیش از 110 باشد و یا دارای معدل بیش از 18 باشد. از سوی دیگر کسانی که بخواهند 20 درصد تخفیف شامل ایشان شود می بایست یا دارای IQ بیش از 100 باشند و یا معدل ایشان بیش از 17 باشد. در نهایت کسانیکه هیچ یک از این چهار حالت شامل حال ایشان نشود هیچ گونه تخفیف شهریه ای نخواهند گرفت. در این صورت می بایست کد خود را به شکل زیر بازنویسی کنیم:

public class NestedIfStatement {
    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 و else if می باشد. به عبارت دیگر علامت || که از فشردن هم زمان دو بار کلیدهای Shift و دکمه ی \ تایپ می شود، در زبان برنامه نویسی جاوا به معنای "یا" می باشد. اکنون دانشجویی که در کد پیشین هیچ گونه تخفیفی شامل حالش نمی شد، در این برنامه جدید 20 درصد تخفیف خواهد گرفت چرا که یکی از دو شرط else if شامل حال وی می شود (به عبارت دیگر از آنجا که معدل ایشان معادل با 17.3 است شرط معدل که می بایست بالای 17 باشد در مورد ایشان صدق کرده و بالتبع دستور شرط else if برای ایشان که همان 20 درصد تخفیف است اجرا خواهد شد). نتیجه برنامه جدید همانند نتیجه ای است که در تصویر زیر مشاهده می شود:

در قسمت پایانی این آموزش به توضیح Nested If Statement ها می رسیم. به طور خیلی ساده می توان گفت که Nested If Statement ها به شرط های if گفته می شود که داخل یک شرط if دیگر قرار می گیرند. برای توضیح Nested If Statement ها کد فوق را به صورت زیر تغییر می دهیم:

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

در کد فوق یک متغیر از جنس int تحت عنوان age به معنای "سن" داریم که Value اختصاص داده شده به آن معادل با 30 است. حال می خواهیم شرطی قرار دهیم مبنی بر این که اگر مقدار متغیر ما بیش از 40 بود جمله ی .You are older than 40 به معنای "شما بیش از 40 سال سن دارید." در بخش کنسول نمایش داده شود و در غیر این صورت جمله ی .You are not older than 40 به معنای "شما زیر 40 سال هستید." نمایش داده شود. برای همین منظور کد خود را به شکل زیر تکمیل می کنیم:

public class NestedIfStatement {
    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 معادل با 30 تعریف شده است و در شرط خود قرار داده ایم age > 40 پس جواب به این شرط false بوده و در نهایت دستور قرار گرفته در else اجرا می شود. حال می خواهیم تا یک شرط دیگر را داخل شرط اصلی بگنجانیم مبنی بر این که ببینیم با این که شما بیش از 40 سال سن ندارید آیا زیر 20 سال می باشید یا بالای 20 سال؟ از این رو کد خود را به شکل زیر تکمیل می کنیم:

public class NestedIfStatement {
    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.");
	    }
	}
    }
}

در صورت false بودن شرط if که در کد فوق مشاهده می شود، در بخش else دستوری آمده است که جمله ی .You are not older than 40 را نشان خواهد داد. اکنون بلافاصله یک دستور شرطی دیگر پس از else قرار گرفته مبنی بر این که حالا که شما بیش از 40 سال سن ندارید، می خواهیم ببینیم که سن شما زیر 20 سال است یا بالای 20 سال؟ به همین خاطر در شرط مقابل if دوم برنامه می نویسیم age < 20 که اگر جواب به آن true باشد جمله ی .You are under 20 به معنای "شما زیر 20 سال سن دارید." نمایش داده خواهد شد و در غیر این صورت دستور else دوم که .You are over 20 که به معنای "شما بیش از 20 سال سن دارید." می باشد اجرا خواهد شد. پس از اجرای برنامه نتیجه زیر مشاهده خواهد شد:

به طور خلاصه در شرط اول مشخص می شود که "سن شما بیش از 40 سال نیست" و در if دومی که داخل if اصلی قرار گرفته است مشخص می شود که "شما بیش از 20 سال سن دارید".

دانلود فایل‌های تمرین
لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
yazdang33
yazdang33
سلام. در اونجا که دو متغیر iq و معدل رو تعریف کردید کمی پایین تر(حدود دو سه خط پایین تر) گفتید "خود را به شکل زیر تکمیل میکنیم" و کلمه "کد" رو جا گذاشتید (ننوشتید). لطفا اصلاح کنید. ممنون از شما.
کاربر میهمان
کاربر میهمانمن یک کاربر مهمان هستم
اینا دانلود نمیشن؟؟
کاربر میهمان
کاربر میهمانمن یک کاربر مهمان هستم
mamnoon az mataleb khubetun
پویا نظری
پویا نظریتوسعه‌دهنده‌ موبایل اپ، دانشجوی نرم‌افزار
اگه اشتباه نکنم خط 6 اکولادی که برای else باز کردید یادتون رفته ببندید
همن اخرین مثالی که نوشتید
البته باید آکولاد بعد
:("System.out.println("You are not older than40
باشه
کاربر میهمان
مهرنوشمن یک کاربر مهمان هستم
با سلام و تشکر فراوااان بابت آموزشهای خوبتون
در این آموزش اگر بخواهیم داده مربوط به آی کیو و معدل رو از کاربر دریافت کنیم چکار باید بکنیم؟
من نمی تونم حلش کنم!!
import java.util.Scanner;

public class ElseIf {

public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
double intelligenceQuotient , termMean;
if(intelligenceQuotient110 && termMean18){
System.out.println("You have 30% Discount");
}else if(intelligenceQuotient100 && termMean17){
System.out.println("You have 20% Discount");
}else{
System.out.println("Sorry!! You have No Discount!");
}
myScanner.close();
}
}
MegaMind
MegaMind
منم مثل این دوستمون همین سوال برام پیش اومده بود و پاسختون کاملا روشنم کرد:)
مرسی
کاربر میهمان
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 هم بزارین من که حاضرم هزینش رو هم بدم