Need for Speed

Need for Speed

Άσκηση εκμάθησης

Εισαγωγή

Κατασκευαστές

Η δημιουργία ενός στιγμιότυπου μιας κλάσης γίνεται καλώντας τον κατασκευαστή της μέσω του τελεστή 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

Έτοιμος να ξεκινήσεις την άσκηση Need for Speed;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Java με 26 έννοιες158 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.