آموزش جاوا (فصل ۱۲)

مقدمه‌ای بر ریاضیات در زبان برنامه‌نویسی جاوا


در این آموزش یکی از پرکاربردترین کلاس‌های اصطلاحاً‌ Built-in در زبان برنامه‌نویسی جاوا تحت عنوان Math را مورد بررسی قرار داده و از برخی متدهای تعریف‌شده در این کلاس به منظور انجام برخی عملیات ریاضیاتی در طراحی برنامه‌های خود بهره‌مند خواهیم شد (توجه داشته باشیم که نام این کلاس با حرف اول بزرگ نوشته می‌شود.) در همین راستا، ابتدا پروژه‌ای تحت عنوان Math ایجاد کرده و کلاسی به نام MathClass در آن ایجاد می‌کنیم و پیش از کلیک کردن بر روی دکمۀ Finish، تیک گزینۀ public static void main را می‌زنیم.

برای آنکه بتوانیم متدهای مختلف کلاس Math را مورد بررسی قرار داده و خروجی این متدها را مشاهده کنیم، از متد()println استفاده کرده و خروجی حاصل از فراخوانی متدهای کلاس Math را با به‌کارگیری آن در کنسول چاپ می‌نماییم به طوری که در ابتدا کد مربوط به کلاس MathClass به صورت زیر خواهد بود:

public class MathClass {
    public static void main(String[] args) {
        System.out.println();
    }
}

حال چنانچه آرگومانی را به عنوان ورودی به متد ()println بدهیم، مقدار در نظر گرفته شده در پنجرۀ کنسول نمایش داده می‌شود اما پیش از ادامۀ آموزش، دو رویکرد متفاوت در به اصطلاح ایمپورت کردن کلاس‌های مختلف در برنامه را معرفی کرده و در ادامه متدهایی مانند ()abs و ()ceil و همچنین متد ()floor از کلاس Math را معرفی می‌کنیم.

معرفی روش‌های مختلف ایمپورت کردن کلاس‌ها در برنامه‌های جاوا

به طور خلاصه، می‌توان گفت که کلیۀ کلاس‌ها در زبان برنامه‌نویسی جاوا به دو صورت اصطلاحاً Implicit و Explicit در برنامۀ مورد نظر ایمپورت می‌شوند. برای مثال، کلاسی همچون Scanner به صورت Explicit یا «آشکارا» در برنامۀ مورد نظر ایمپورت می‌شود. به عبارت دیگر، جهت به‌کارگیری این کلاس در برنامه می‌باید در سطر اول به صورت آشکارا آن را ایمپورت نماییم اما از سوی دیگر برخی از کلاس‌ها مانند کلاس String ،Math و بسیاری از کلاس‌های دیگر در زبان جاوا هستند که به صورت Implicit یا «ناآشکار» در برنامۀ مورد نظر ایمپورت می‌شوند. برای مثال، زمانی که از کلاس Stringاستفاده می‌کنیم، می‌بینیم که هیچ دستوری جهت ایمپورت کردن کلاس مذکور در برنامه نمی‌نویسیم بدین دلیل که کلاس String به صورت ضمنی در پروژه‌های ساخته‌شده در اکلیپس ایمپورت می‌شود و کلاس Math نیز به همین صورت است و برای استفاده از آن نیازی به ایمپورت کردن دستی کلاس مذکور نداریم.

حال با آگاهی از این نکته که کلاس Math به صورت ضمنی در برنامۀ ما ایمپورت شده و نیازی به نوشتن دستور مرتبط با ایمپورت آن نداریم، در ادامه به معرفی برخی از متدهای کلاس Math و نحوۀ عملکرد هر یک از آن‌ها می‌پردازیم.

متد ()abs

از جمله متدهای پرکاربرد کلاس Math می‌توان به ()abs اشاره کرد که نام آن از واژۀ Absolute به معنای «مطلق» گرفته شده و این وظیفه را دارا است تا در صورت فراخوانی، تمامی اعدادی که به عنوان آرگومان ورودی به آن پاس داده می‌شوند را به یک عدد مثبت تبدیل کرده و در خروجی ریترن نماید که برای روشن شدن نحوۀ عملکرد این متد، کد فوق را به شکل زیر تکمیل می‌کنیم:

public class MathClass {
    public static void main(String[] args) {
        System.out.println(Math.abs(-100));
    }
}

همان‌طور که مشاهده می‌کنیم، به منظور استفاده از کلاس Math، نام این کلاس را نوشته سپس یک . قرار داده و در ادامه نام متد مورد نظر از این کلاس را می‌نویسیم. در واقع، پس از نوشتن نام کلاس Math و قرار دادن نقطه، اکلیپس به صورت خودکار کلیهٔ متدهای مرتبط با این کلاس را برای‌مان نمایش می‌دهد که از میان متدهای مذکور می‌توانیم ()absرا انتخاب کرده و عدد مربوط به آرگومان ورودی را به آن پاس دهیم. بنابراین در کد فوق عدد 100- به عدد مثبت 100 تبدیل شده و توسط متد ()println در خروجی چاپ می‌گردد.

به علاوه، همان‌طور که در آموزش‌های پیشین اشاره کردیم، جهت نمایش متدهای کلاس Math می‌توانیم پس از نوشتن نام کلاس و درج علامت . کلیدهای Ctrl + Space را به صورت هم‌زمان فشار داده و بدین ترتیب متدهای تعریف‌شده در این کلاس را مشاهده نماییم. همچنین از میان گزینه‌های مربوط به متد ()abs می‌باید متدی را انتخاب کنیم که مرتبط با دیتا تایپ آرگومان ورودی مورد نظر می‌باشد. با در نظر گرفتن این توضیحات، با اجرای برنامۀ فوق در خروجی خواهیم داشت:

100

همان‌طور که ملاحظه می‌کنیم، با استفاده از متد ()abs عدد 100- به عدد مثبت 100 تبدیل شده و در کنسول چاپ شده است. 

متد ()ceil

یکی دیگر از متدهای کلاس Math متدی تحت عنوان ()ceil می‌باشد که نام آن از واژۀ Ceiling به معنای «سقف اتاق» گرفته شده است و وظیفۀ آن تبدیل عددی از نوع اعشاری به یک عدد صحیح می‌باشد به طوری که داده‌ای از جنس اعشاری را به عنوان آرگومان ورودی گرفته و آن را رو به بالا رُند کرده و عددی صحیح را در خروجی ریترن می‌کند. برای مثال، اگر عدد 12/3 را به این متد دهیم، خروجی حاصله عدد 13 خواهد بود که برای درک بهتر نحوۀ کارکرد متد ()ceil و همچنین ارتباط آن با واژۀ Ceiling، تصویر زیر را مد نظر قرار می‌دهیم:

حال در ادامه متد ()ceil را در مثال مربوط به کد فوق فراخوانی می‌کنیم به طوری که در کد زیر داریم:

public class MathClass {
    public static void main(String[] args) {
        System.out.println(Math.ceil(12.3));
    }
}

همان‌طور که در کد فوق ملاحظه می‌کنیم، متد ()ceil از کلاس Math را فراخوانی کرده و عدد اعشاری 12/3 را به عنوان آرگومان ورودی به آن داده‌ایم که عدد ریترن‌شده توسط متد ()println در کنسول چاپ می‌شود به طوری که با اجرای برنامۀ فوق در خروجی خواهیم داشت:

13.0

همان‌طور که می‌بینیم، عدد 12/3 رو به بالا رُند شده و در نتیجۀ آن عدد 13 در کنسول چاپ می‌شود. 

متد ()floor

نحوۀ عملکرد متد ()floor دقیقاً برعکس متد ()ceil می‌باشد که نام آن نیز از واژۀ Floor به معنای «کف اتاق» گرفته شده است و با توجه به تصویر زیر می‌توانیم عملکرد این متد را حدس بزنیم:

در واقع، متد ()floor یک عدد اعشاری را به عنوان آرگومان ورودی گرفته و آن را رو به پایین رُند می‌کند و در ادامه عدد رُندشده را در خروجی ریترن می‌کند که برای روشن شدن نحوۀ کار این متد، کد مربوط به مثال پیشین را به صورت زیر بازنویسی می‌کنیم:

public class MathClass {
    public static void main(String[] args) {
        System.out.println(Math.floor(12.3));
    }
}

در کد فوق، متد ()floor از کلاس Math را فراخوانی کرده و عدد 12/3 را به عنوان ورودی به آن داده‌ایم که نتیجۀ ریترن‌شده در خروجی نیز توسط متد ()println در کنسول چاپ می‌شود به طوری که با اجرای برنامۀ فوق در خروجی خواهیم داشت:

12.0

همان‌طور که مشاهده می‌کنیم، متد ()floor عدد 12/3 را رو به پایین رُند کرده و آن را به عدد 12 کاهش داده است.  دانلود فایل‌های تمرین

آشنایی با برخی متدهای کاربردی کلاس Math در زبان برنامه‌نویسی جاوا


در ادامۀ آموزش پیشین، در این آموزش جهت معرفی برخی دیگر از متدهای کاربردی کلاس Math از پروژۀ تعریف‌شده در آموزش قبل استفاده کرده و قصد داریم تا نحوۀ عملکرد متدهایی همچون ()max و ()min و همچنین متدهای()pow و ()sqrt به همراه متد ()round را مورد بررسی قرار دهیم.

متد ()max

اولین متدی که در این آموزش از کلاس Math مورد بررسی قرار می‌دهیم ()max است که بر خلاف متدهای معرفی‌شده در آموزش پیش، دو آرگومان ورودی می‌گیرد که با یک , از یکدیگر جدا می‌شود. در واقع، وظیفۀ متد ()max این است که از بین دو آرگومان ورودی عدد بزرگ‌تر را در خروجی ریترن کند که برای درک بهتر نحوۀ کار این متد، کد مربوط به کلاسMathClass از آموزش پیشین را مد نظر قرار داده و در آن متد ()max را به صورت زیر فراخوانی می‌کنیم:

public class MathClass {
    public static void main(String[] args) {
        System.out.println(Math.max(12, 22));
    }
}

همان‌طور که ملاحظه می‌کنیم، متد ()max با دو آرگومان ورودی معادل اعداد 12 و 22 فراخوانی شده است که با اجرای برنامه انتظار داریم تا عدد 22 در خروجی ریترن شده و توسط متد ()println در کنسول چاپ شود. بنابراین با اجرای کد فوق در خروجی خواهیم داشت:

22

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

public class MathClass {
    public static void main(String[] args) {
        System.out.println(Math.max(12.1, 22));
    }
}

در کد فوق، متد ()max از کلاس Math با دو آرگومان ورودی معادل اعداد 12/1 و 22 فراخوانی شده است و انتظار داریم که خروجی حاصل از آن عدد 22 باشد که با اجرای برنامه در خروجی خواهیم داشت:

22.0

همان‌طور که مشاهده می‌کنیم، باز هم عدد بزرگ‌تر معادل عدد 22 توسط متد ()println در کنسول چاپ شده است با این تفاوت که عدد صحیح 22 به یک عدد اعشاری معادل 22/0 تبدیل شده است. در واقع، آرگومان‌های ورودی متد()max هم می‌توانند داده‌ای از جنس int و هم double باشند اما در این مثال یکی از ورودی‌ها از نوع عدد صحیح و دیگری اعشاری بود و از همین روی با فراخوانی متد ()max ابتدا هر دو عدد به مقادیری از جنس double تبدیل شده و در ادامه با یکدیگر مقایسه شدند تا بزرگ‌ترین مقدار (در این مثال عدد 22/0) در خروجی ریترن گردد. 

متد ()min

متد ()min نقطۀ مقابل ()max است که وظیفۀ آن پیدا کردن کوچک‌ترین مقدار از میان دو آرگومان ورودی و ریترن کردن مقدار کوچک‌تر در خروجی می‌باشد که برای درک بهتر نحوۀ عملکرد این متد کد، فوق را به صورت زیر بازنویسی می‌کنیم:

public class MathClass {
    public static void main(String[] args) {
        System.out.println(Math.min(12.1, 22));
    }
}

پس از اجرای برنامۀ فوق، مشابه مثال پیشین ابتدا هر دو عدد به مقادیر اعشاری تبدیل شده سپس از میان آن‌ها کوچک‌ترین مقدار توسط متد ()println در کنسول چاپ شده است به طوری که با اجرای برنامۀ فوق در خروجی خواهیم داشت:

12.1

همان‌طور که می‌بینیم، فراخوانی متد ()min با دو آرگومان ورودی معادل اعداد 12/1 و 22 منجر به ریترن شده کوچک‌ترین مقدار معادل عدد 12/1 در خروجی شده است.

متد ()pow

در این بخش از آموزش متد دیگری از کلاس Math تحت عنوان ()pow را معرفی می‌نماییم. در واقع، متد ()powجهت به توان رساندن مقادیر عددی مورد استفاده قرار می‌گیرد و نحوۀ کار آن بدین صورت است که دو آرگومان ورودی گرفته و عدد مربوط به آرگومان ورودی اول را به توان آرگومان ورودی دوم می‌رساند که با دانستن این نکته می‌توانیم کد فوق را به صورت زیر بازنویسی نماییم تا خروجی متدی را مشاهده کنیم که مسئول به توان رساندن در زبان برنامه‌نویسی جاوا است:

public class MathClass {
    public static void main(String[] args) {
        System.out.println(Math.pow(2, 3));
    }
}

در تفسیر کد فوق باید گفت که متد ()pow از کلاس Math را با دو آرگومان ورودی معادل اعداد 2 و 3 فراخوانی کرده‌ایم که پس از اجرای برنامه نیز عدد 2 به توان 3 رسیده و نتیجۀ حاصل از آن توسط متد ()println در خروجی ریترن می‌شود به طوری که با اجرای برنامۀ فوق در خروجی خواهیم داشت:

8.0

همان‌طور که می‌بینیم، حاصل عملیات ریاضیاتی 2 به توان 3 معادل عدد 8 در کنسول چاپ شده است. در ادامه، متد دیگری را معرفی می‌کنیم که نقطۀ مقابل متد ()pow می‌باشد.

متد ()sqrt 

از جمله دیگر متدهای کلاس Math می‌توان به ()sqrt اشاره کرد که به منظور گرفتن جذرِ عدد مربوط به آرگومان‌ ورودی مورد استفاده قرار می‌گیرد و نحوۀ عملکرد آن بدین صورت است که یک آرگومان ورودی گرفته و عدد معادل جذر آن را در خروجی ریترن می‌کند (توجه داشته باشیم که نام این متد از واژۀ Square Root به معنای «جذر» در ریاضیات گرفته شده است.) اکنون پس از آشنایی با این متد می‌توانیم کد مربوط به مثال پیشین را به صورت زیر بازنویسی کنیم:

public class MathClass {
    public static void main(String[] args) {
        System.out.println(Math.sqrt(9));
    }
}

در کد فوق، عدد 9 را به عنوان آرگومان ورودی به متد ()sqrt داده‌ایم. در حقیقت، علت انتخاب عدد 9 به عنوان آرگومان ورودی این است که عدد مذکور دارای یک مجذور رُند می‌باشد اما می‌توانیم هر عدد مثبت دلخواهی را به عنوان ورودی به این متد بدهیم. اکنون پس از اجرای برنامه در خروجی خواهیم داشت:

3.0

همان‌طور که می‌بینیم، فراخوانی متد ()sqrt با آرگومان ورودی معادل عدد 9 منجر به ریترن شدن عدد 3 در خروجی شده و این عدد نیز توسط متد ()println در کنسول چاپ شده است.

متد ()round

در پایان، با متد ()round و همچنین نحوۀ عملکرد آن آشنا می‌شویم که این وظیفه را دارا است تا تمامی اعدادی که به عنوان آرگومان ورودی دریافت می‌کند را به عددی رُند تبدیل کرده و در خروجی ریترن نماید و نکتۀ قابل‌توجه در ارتباط با نحوۀ عملکرد متد ()round این است که عددی همچون 21/3 را به عدد 21 و عددی مانند 21/6 را به عدد 22 رُند می‌کند بدین معنی که چنانچه مقدار اعشار عدد مورد نظر کوچک‌تر از 0/5 باشد، عدد مذکور را رو به پایین و در غیر این صورت آن را رو به بالا رُند نموده و در خروجی ریترن می‌کند که برای روشن شدن نحوۀ عملکرد این متد، کد فوق را به صورت زیر بازنویسی می‌کنیم:

public class MathClass {
    public static void main(String[] args) {
        System.out.println(Math.round(21.3));
    }
}

در کد فوق، متد ()round را با آرگومان ورودی معادل عدد 21/3 فراخوانی نموده‌ایم و می‌بینیم که بخش اعشار این عدد کمتر از 0/5 می‌باشد و از همین روی متد ()round آن را رو به پایین معادل عدد 21 رُند می‌کند که برای حصول اطمینان از این موضوع، برنامۀ فوق را یک بار اجرا می‌کنیم و در خروجی خواهیم داشت:

21

همان‌طور که می‌بینیم، عدد اعشاری 21/3 رو به پایین رُند شده و نتیجۀ حاصل از آن توسط متد ()println در کنسول نمایش داده می‌شود. حال اگر عدد مربوط به آرگومان ورودی را به 21/6 تغییر دهیم، در خروجی خواهیم داشت:

22

در واقع، بخش اعشاری عدد 21/6 بزرگ‌تر از 0/5 بوده و از همین روی متد ()round آن را رو به بالا معادل عدد 22 رُند کرده است.

معرفی کلیدواژۀ enum در زبان برنامه‌نویسی جاوا


همان‌طور که در آموزش آشنایی با روش‌های نام‌گذاری متغیرها در زبان برنامه‌نویسی جاوا توضیح دادیم، دیتا تایپboolean به منظور تعریف شرایطی مورد استفاده قرار می‌گیرد که در آن بیش از دو حالت نداشته باشیم و مسلماً اگر در شرایطی قرار بگیریم که بیش از دو حالت پیش روی ما باشد، به طور قطع از این دیتا تایپ نخواهیم توانست استفاده کنیم که طراحان زبان برنامه‌نویسی جاوا برای چنین شرایطی enum را در این زبان شیئ‌گرا گنجانده‌اند.

در واقع، کیورد enum از واژۀ Enumeration به معنای «شمارش» گرفته شده است که در زبان برنامه‌نویسی جاوا به منظور تعریف شرایطی با بیش از دو حالت مورد استفاده قرار می‌گیرد که به عنوان چند مثال از دنیای واقعی می‌توان چراغ‌های راهنمایی را نام برد که دارای سه حالت سبز، قرمز و زرد هستند یا روزهای هفته که شنبه، یکشنبه، دوشنبه، سه شنبه، چهارشنبه، پنج شنبه و جمعه را شامل می‌شوند. به علاوه،‌ یک کشور می‌تواند توسعه یافته، در حال توسعه و یا عقب افتاده باشد!

به طور کلی، می‌توان گفت که ساختار enum یک نوع کلاس در زبان جاوا می‌باشد که از چند مقدار کانستنت تشکیل شده است و مثال‌های فوق‌الذکر مواردی از دنیای واقعی هستند که اگر بخواهیم برنامه‌ای در رابطه با آن‌ها بنویسیم، ناگزیر می‌باید از ساختار enum استفاده کنیم.

در همین راستا، به منظور درک بهتر ساختار enum ابتدا یک سناریو تعریف کرده و آن را پیاده‌سازی می‌نماییم. برای مثال، یک مسابقۀ فوتبال را مد نظر قرار می‌دهیم که سه نتیجۀ متفاوت می‌تواند داشته باشد که عبارتند از تیم «الف» برنده بوده و تیم «ب» بازنده است، در حالت دوم تیم «ب» برنده و تیم «الف» بازنده است و در حالت سوم نیز نتیجۀ مسابقه مساوی می‌باشد. بنابراین برای شروع کار پروژه‌ای تحت عنوان Enum ایجاد کرده و کلاسی تحت عنوان FootballMatch در آن می‌سازیم و در ابتدای کار کد مربوط به این کلاس به صورت زیر خواهد بود:

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

در این مرحله نیاز داریم تا امکانی را برای کاربر فراهم کنیم تا بتواند نتیجۀ بازی را وارد برنامه کند و برای این منظور نیز از کلاس Scanner استفاده کرده و کد فوق را به صورت زیر تکمیل می‌کنیم:

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

همان‌طور که در کد فوق ملاحظه می‌کنیم، آبجکتی تحت عنوان keyboardInput از روی کلاس Scanner ایجاد کرده‌ایم و با استفاده از دستور System.in امکان دسترسی سیستم به ورودی آی‌دی‌ای را فراهم نموده‌ایم سپس به صورت زیر اقدام به تعریف ساختار enum در برنامه می‌کنیم:

import java.util.Scanner;
public class FootballMatch {
    enum WhoWins {
        Perspolis, Esteghlal, Equal
    };
    public static void main(String[] args) {
        Scanner keyboardInput = new Scanner(System.in);
    }
}

همان‌طور که در کد فوق مشاهده می‌کنیم، پیش از کد مربوط به متد ()main اقدام به نوشتن کد مربوط به enumمی‌کنیم بدین صورت که کلیدواژۀ enum را نوشته سپس نامی دلخواه همچون WhoWins برای آن در نظر می‌گیریم. در ادامه، داخل بلوک مربوط به enum یا به عبارتی داخل علائم { } حالت‌های مد نظر خود را نوشته و آن‌ها را با علامت, از هم جدا می‌کنیم (توجه داشته باشیم که با مد نظر قرار دادن نیاز مسئله می‌توانیم به تعداد دلخواه حالات مختلف تعریف نماییم.)

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

import java.util.Scanner;
public class FootballMatch {
    enum WhoWins {
        Perspolis, Esteghlal, Equal
    };
    public static void main(String[] args) {
        Scanner keyboardInput = new Scanner(System.in);
        System.out.print("Please enter the score of Perspolis: ");
        int perspolisScore = keyboardInput.nextInt();
        keyboardInput.close();
    }
}

در کد فوق، ابتدا استرینگ «:Please enter the score of Perspolis» را در پنجرۀ کنسول نمایش می‌دهیم تا به کاربر اطلاع دهیم که امتیاز تیم پرسپولیس را وارد برنامه کند سپس با استفاده از دیتا تایپ int متغیری تحت عنوانperspolisScore ایجاد کرده و مقدار حاصل از فراخوانی متد ()nextInt روی آبجکت ساخته‌شده از روی کلاسScanner را بدان منتسب می‌کنیم. بنابراین دیتای مربوط به امتیاز تیم پرسپولیس توسط متد ()nextInt خوانده شده و در متغیر perspolisScore نگهداری می‌شود. حال به صورت زیر همین مراحل را برای دریافت امتیاز تیم استقلال تکرار می‌کنیم:

import java.util.Scanner;
public class FootballMatch {
    enum WhoWins {
        Perspolis, Esteghlal, Equal
    };
    public static void main(String[] args) {
        Scanner keyboardInput = new Scanner(System.in);
        System.out.print("Please enter the score of Perspolis: ");
        int perspolisScore = keyboardInput.nextInt();
        System.out.print("Please enter the score of Estghlal: ");
        int esteghlalScore = keyboardInput.nextInt();
        keyboardInput.close();
    }
}

در کد فوق، ابتدا استرینگی در کنسول نمایش می‌دهیم تا کاربر امتیاز تیم استقلال را وارد برنامه کند سپس مشابه آنچه که در بالا توضح دادیم، مقدار ورودی را خوانده و آن را به متغیر esteghlalScore منتسب می‌کنیم. اکنون برنامه را اجرا می‌کنیم و در خروجی خواهیم داشت:

Please enter the score of Perspolis: 2
Please enter the score of Estghlal: 2

همان‌طور که ملاحظه می‌کنیم، استرینگ اول چاپ شده و در ادامه از طریق کیبورد می‌توانیم عدد مربوط به امتیاز تیم پرسپولیس را وارد کنیم که به محض وارد کردن عدد اول و فشردن دکمۀ اینتر، استرینگ دوم به نمایش درآمده و می‌توانیم عدد مربوط به امتیاز تیم استقلال را وارد کنیم. حال جهت مقایسۀ نتایج هر دو تیم، اقدام به استفاده از دستوراتی شرطی از جنس if می‌کنیم (جهت کسب اطلاعات بیشتر در این مورد، به آموزش آشنایی با دستور شرطی if در زبان برنامه‌نویسی جاوا مراجعه نمایید.) حال برای تعریف دستورات شرطی مورد نظر، کد فوق را به صورت زیر تکمیل می‌نماییم:

import java.util.Scanner;
public class FootballMatch {
    enum WhoWins {
        Perspolis, Esteghlal, Equal
    };
    public static void main(String[] args) {
        Scanner keyboardInput = new Scanner(System.in);
        System.out.print("Please enter the score of Perspolis: ");
        int perspolisScore = keyboardInput.nextInt();
        System.out.print("Please enter the score of Estghlal: ");
        int esteghlalScore = keyboardInput.nextInt();
        if (perspolisScore > esteghlalScore) {
            System.out.print(WhoWins.Perspolis + " is the Winner.");
            } else if (esteghlalScore > perspolisScore) {
            System.out.print(WhoWins.Esteghlal + " is the Winner.");
            } else {
            System.out.print(WhoWins.Equal);
        }
        keyboardInput.close();
    }
}

در کد فوق، از دستورات شرطی تودرتو استفاده کرده‌ایم بدین صورت که چنانچه مقدار منتسب به متغیر perspolisScore بزرگ‌تر از esteghlalScore باشد، دستور شرطی برقرار بوده و دستورات مرتبط با آن مبنی بر چاپ مقدار Perspolis از ساختار enum تحت عنوان WhoWins به همراه استرینگ «.is the Winner» اجرا می‌شوند و در غیر این صورت مجدداً در دستور else if بررسی می‌کنیم که چنانچه مقدار اختصاص‌یافته به متغیر esteghlalScore  بزرگ‌تر از مقدار متغیر perspolisScore باشد، مقدار Esteghlal به همراه استرینگ مربوطه در کنسول چاپ گردد و در صورت برقرار نبودن هیچ یک از این شروط نیز دستورات مرتبط با else اجرا شده و دیتای Equal در کنسول چاپ می‌شود (توجه داشته باشیم که برای دسترسی به هر یک از مقادیر ساختار enum ابتدا نام آن را نوشته سپس یک علامت . قرار داده و در ادامه نام دیتای مورد نظر جهت دستیابی به آن را درج می‌کنیم.) اکنون برنامه را اجرا کرده به طوری که در خروجی خواهیم داشت:

Please enter the score of Perspolis: 4
Please enter the score of Estghlal: 2
Perspolis is the Winner.

در اجرای اول، امتیاز تیم پرسپولیس را 4 در نظر گرفته و امتیاز استقلال را 2 وارد کرده‌ایم که پس از فشردن دکمۀ اینتر می‌بینیم که شرط اول برقرار بوده و مقدار Perspolis در کنسول چاپ می‌شود. در ادامه مجدداً برنامه را اجرا کرده و این بار امتیاز تیم استقلال را عددی بالاتر وارد می‌کنیم به طوری که داریم:

Please enter the score of Perspolis: 2
Please enter the score of Estghlal: 4
Esteghlal is the Winner.

در اجرای دوم، امتیاز تیم پرسپولیس را 2 در نظر گرفته و امتیاز استقلال را 4 وارد کرده‌ایم که در این صورت دستورelse if برقرار بوده و از همین روی مقدار Esteghlal در کنسول چاپ می‌گردد. در این مرحله، برنامه را یک بار دیگر اجرا کرده و امتیازی برابر برای هر دو تیم وارد می‌کنیم به طوری که در خروجی خواهیم داشت:

Please enter the score of Perspolis: 0
Please enter the score of Estghlal: 0
Equal

همان‌طور که می‌بینیم، در اجرای سوم امتیاز تیم پرسپولیس را 0 در نظر گرفته و امتیاز استقلال را هم معادل عدد 0 وارد کرده‌ایم که هیچ یک از شرایط برنامه برقرار نبوده و دستورات مرتبط با else اجرا می‌شوند و از همین روی دیتایEqual از ساختار WhoWins در کنسول نمایش داده شده است. دانلود فایل‌های تمرین

مطالب مرتبط

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *