مسیرها
/
Java
Java
/
تمرین‌ها
/
خودروها، مونتاژ شوید!
خودروها، مونتاژ شوید!

خودروها، مونتاژ شوید!

تمرین یادگیری

مقدمه

اعداد

در Java دو نوع متفاوت عدد وجود دارد:

  • اعداد صحیح: اعدادی که هیچ رقمی پشت جداکننده‌ی اعشار ندارند (اعداد کامل). مثال‌هایی از آن‌ها -6، 0، 1، 25، 976 و -500000 است.
  • اعداد اعشاری: اعدادی با صفر یا چند رقم پشت جداکننده‌ی اعشار. مثال‌هایی از آن‌ها -20.4، 0.1، 2.72، 16.984025 و 1024.0 است.

دو نوع عددی رایج در Java، int و double هستند. یک int عدد صحیحی ۳۲ بیتی است و یک double عددی اعشاری ۶۴ بیتی.

محاسبات با عملگرهای حسابی استاندارد انجام می‌شود. اعداد را می‌توان با عملگرهای استاندارد مقایسه‌ی عددی (مثلاً 5 > 4 و 4 <= 5) و عملگرهای تساوی (==) و نامساوی (!=) مقایسه کرد.

Java دو نوع تبدیل عددی دارد:

  1. تبدیل‌های ضمنی: هیچ داده‌ای از دست نمی‌رود و نیازی به نگارش اضافی نیست.
  2. تبدیل‌های صریح: ممکن است داده از دست برود و به نگارش اضافی به شکل یک «تبدیل نوع» نیاز است.

چون int دقت کمتری از double دارد، تبدیل از int به double ایمن است و در نتیجه یک تبدیل ضمنی به شمار می‌رود. اما تبدیل از double به int ممکن است به از دست رفتن داده منجر شود، پس به یک تبدیل صریح نیاز دارد.

دستور if-else

دستور «if-then»

پایه‌ای‌ترین دستور کنترل جریان در Java، دستور if-then است. از این دستور استفاده می‌شود تا بخشی از کد فقط در صورتی اجرا شود که شرط خاصی true باشد. یک دستور if-then با بند if تعریف می‌شود:

class Car {
    void drive() {
        // the "if" clause: the car needs to have fuel left to drive
        if (fuel > 0) {
            // the "then" clause: the car drives, consuming fuel
            fuel--;
        }
    }
}

در مثال بالا، اگر خودرو سوخت نداشته باشد، فراخوانی متد Car.drive هیچ کاری انجام نمی‌دهد.

دستور «if-then-else»

دستور if-then-else مسیر اجرای جایگزینی را برای زمانی فراهم می‌کند که شرط موجود در بند if به false ارزیابی شود. این مسیر اجرای جایگزین پس از یک بند if می‌آید و با بند else تعریف می‌شود:

class Car {
    void drive() {
        if (fuel > 0) {
            fuel--;
        } else {
            stop();
        }
    }
}

در مثال بالا، اگر خودرو سوخت نداشته باشد، فراخوانی متد Car.drive متد دیگری را برای متوقف کردن خودرو فراخوانی می‌کند.

دستور if-then-else با استفاده از بند else if از چندین شرط هم پشتیبانی می‌کند:

class Car {
    void drive() {
        if (fuel > 5) {
            fuel--;
        } else if (fuel > 0) {
            turnOnFuelLight();
            fuel--;
        } else {
            stop();
        }
    }
}

در مثال بالا، راندن خودرو زمانی که سوخت کمتر یا مساوی 5 باشد، خودرو را به حرکت درمی‌آورد، اما چراغ سوخت را روشن می‌کند. وقتی سوخت به 0 برسد، خودرو از حرکت می‌ایستد.

دستورالعمل‌ها

در این تمرین کدی می‌نویسید که تولید یک خط مونتاژ را در یک کارخانه‌ی خودروسازی تحلیل می‌کند. سرعت خط مونتاژ می‌تواند از 0 (خاموش) تا 10 (حداکثر) متغیر باشد.

در کم‌ترین سرعت (1)، ساعتی 221 خودرو تولید می‌شود. تولید به‌طور خطی با سرعت افزایش می‌یابد. بنابراین اگر سرعت روی 4 تنظیم شود، باید ساعتی 4 * 221 = 884 خودرو تولید شود. اما سرعت‌های بالاتر احتمال تولید خودروهای معیوب را بیشتر می‌کند، خودروهایی که بعد باید دور انداخته شوند. جدول زیر نشان می‌دهد سرعت چگونه بر نرخ موفقیت تأثیر می‌گذارد:

  • 1 تا 4: نرخ موفقیت ۱۰۰٪.
  • 5 تا 8: نرخ موفقیت ۹۰٪.
  • 9: نرخ موفقیت ۸۰٪.
  • 10: نرخ موفقیت ۷۷٪.

دو وظیفه دارید.

1. محاسبه‌ی نرخ تولید در ساعت

متد CarsAssemble.productionRatePerHour() را پیاده‌سازی کنید تا نرخ تولید ساعتی خط مونتاژ را با در نظر گرفتن سرعت و نرخ موفقیت فعلی خط مونتاژ محاسبه کنید:

CarsAssemble.productionRatePerHour(6)
// => 1193.4

دقت کنید که مقدار بازگشتی از نوع double است.

2. محاسبه‌ی تعداد خودروهای سالم تولیدشده در هر دقیقه

متد CarsAssemble.workingItemsPerMinute() را پیاده‌سازی کنید تا محاسبه کنید در هر دقیقه چند خودروی سالم تولید می‌شود:

CarsAssemble.workingItemsPerMinute(6)
// => 19

دقت کنید که مقدار بازگشتی از نوع int است.

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Java Exercism

آماده‌اید خودروها، مونتاژ شوید! را شروع کنید؟

در Exercism ثبت‌نام کنید تا Java را همراه با 26 مفهوم158 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.