المسارات
/
Java
Java
/
التمارين
/
الحاجة إلى السرعة
الحاجة إلى السرعة

الحاجة إلى السرعة

تمرين تعلّمي

مقدمة

المنشئات

يتم إنشاء نسخة من الصنف عن طريق استدعاء المنشئ الخاص به باستخدام العامل new. المنشئ نوع خاص من الطرق، هدفه تهيئة نسخة أُنشئت للتو. تشبه المنشئات الطرق العادية، لكنها بدون نوع إرجاع، واسمها مطابق لاسم الصنف.

class Library {
    private int books;

    public Library() {
        // Initialize the books field
        this.books = 10;
    }
}

// This will call the constructor
var library = new Library();

ومثل الطرق العادية، يمكن أن تحتوي المنشئات على معاملات. عادةً ما تُخزَّن معاملات المنشئ في حقول (خاصة) للرجوع إليها لاحقًا، أو تُستخدم في عملية حسابية لمرة واحدة. ويمكن تمرير الوسائط إلى المنشئات تمامًا كما تُمرَّر الوسائط إلى الطرق العادية.

class Building {
    private int numberOfStories;
    private int totalHeight;

    public Building(int numberOfStories, double storyHeight) {
        this.numberOfStories = numberOfStories;
        this.totalHeight = numberOfStories * storyHeight;
    }
}

// Call a constructor with two arguments
var largeBuilding = new Building(55, 6.2);

التعليمات

في هذا التمرين، ستُنظّم سباقات بين أنواع مختلفة من سيارات التحكم عن بُعد. ولكل سيارة سرعتها الخاصة وخصائص استهلاكها للبطارية.

تبدأ السيارات ببطاريات ممتلئة بالكامل (100%). وفي كل مرة تقود فيها السيارة باستخدام جهاز التحكم عن بُعد، تقطع مسافة تساوي سرعة السيارة بالأمتار، وتخفض نسبة البطارية المتبقية بمقدار استهلاكها.

وإذا كانت بطارية السيارة أقل من نسبة استهلاكها، فلن تتمكن من قيادتها بعد ذلك.

لكل حلبة سباق مسافتها الخاصة. ويُختبر كل سيارة بالتحقق مما إذا كانت قادرة على إنهاء الحلبة دون استنفاد بطاريتها.

لديك ست مهام، وستتعامل كل واحدة منها مع نسخ من سيارات التحكم عن بُعد.

1. إنشاء سيارة تحكم عن بُعد

اسمح بإنشاء سيارة تحكم عن بُعد من خلال تعريف مُنشئ لصنف NeedForSpeed يأخذ سرعة السيارة بالأمتار ونسبة استهلاك البطارية كمعاملَيه الاثنين (وكلاهما من النوع int):

int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);

2. إنشاء حلبة سباق

اسمح بإنشاء حلبة سباق من خلال تعريف مُنشئ لصنف RaceTrack يأخذ مسافة الحلبة بالأمتار كمعامله الوحيد (وهو من النوع int):

int distance = 800;
var raceTrack = new RaceTrack(distance);

3. قُد السيارة

نفّذ طريقة NeedForSpeed.drive() التي تحدّث عدد الأمتار المقطوعة بناءً على سرعة السيارة. ونفّذ أيضًا طريقة NeedForSpeed.distanceDriven() لتُرجع عدد الأمتار التي قطعتها السيارة:

int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);
car.drive();

car.distanceDriven();
// => 5

4. التحقق من استنفاد البطارية

حدّث طريقة NeedForSpeed.drive() لتستهلك البطارية بناءً على استهلاك بطارية السيارة. ونفّذ أيضًا طريقة NeedForSpeed.batteryDrained() التي تشير إلى ما إذا كانت البطارية مستنفدة إلى حد يمنع القيادة:

int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);
car.drive();

car.batteryDrained();
// => false

5. إنشاء سيارة Nitro للتحكم عن بُعد

سيارة التحكم عن بُعد الأكثر مبيعًا هي Nitro، التي تبلغ سرعتها القصوى المذهلة 50 مترًا مع استهلاك بطارية نسبته 4%. نفّذ الطريقة (الثابتة) NeedForSpeed.nitro() لتُرجع سيارة من هذا النوع:

var car = NeedForSpeed.nitro();
car.drive();
car.distanceDriven();
// => 50

6. التحقق من قدرة سيارة تحكم عن بُعد على إنهاء السباق

لإنهاء السباق، يجب أن تكون السيارة قادرة على قطع مسافة السباق. وهذا يعني ألا تستنفد بطاريتها قبل أن تعبر خط النهاية. نفّذ طريقة RaceTrack.canFinishRace() التي تأخذ نسخة NeedForSpeed كمعامل لها وتُرجع true إذا كانت السيارة قادرة على إنهاء السباق، وإلا فتُرجع false:

int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);

int distance1 = 100;
var race1 = new RaceTrack(distance1);

int distance2 = 300;
var race2 = new RaceTrack(distance2);

race1.canFinishRace(car);
// => true

race2.canFinishRace(car);
// => false
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Java Exercism

مستعد لبدء الحاجة إلى السرعة؟

سجّل في Exercism لتتعلّم وتتقن Java عبر 26 مفهومًا158 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.