Διαδρομές
/
Java
Java
/
Ασκήσεις
/
Παρατηρητής πουλιών
Παρατηρητής πουλιών

Παρατηρητής πουλιών

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

Εισαγωγή

Πίνακες

Στη Java, οι πίνακες είναι ένας τρόπος να αποθηκεύεις πολλαπλές τιμές του ίδιου τύπου σε μία μόνο δομή. Σε αντίθεση με άλλες δομές δεδομένων, οι πίνακες έχουν σταθερό μέγεθος από τη στιγμή που θα δημιουργηθούν. Μπορείς να αναθέσεις στοιχεία σε έναν πίνακα ή να τα ανακτήσεις από αυτόν χρησιμοποιώντας μια θέση. Οι πίνακες στη Java χρησιμοποιούν μηδενική αρίθμηση: η θέση του πρώτου στοιχείου είναι 0, η θέση του δεύτερου στοιχείου είναι 1, κ.ο.κ.

Ακολουθεί η βασική σύνταξη για την αρχικοποίηση ενός πίνακα:

type[] variableName = new type[size];

Το type είναι ο τύπος των στοιχείων του πίνακα, ο οποίος μπορεί να είναι ένας πρωτογενής τύπος (π.χ. int) ή μια κλάση (π.χ. String).

Το size είναι ο αριθμός των στοιχείων που θα χωρέσει αυτός ο πίνακας (και δεν μπορεί να αλλάξει αργότερα). Μετά τη δημιουργία του πίνακα, τα στοιχεία αρχικοποιούνται στις προεπιλεγμένες τιμές τους (συνήθως 0, false ή null).

// Declare array with explicit size (size is 2)
int[] twoInts = new int[2];

Οι πίνακες μπορούν επίσης να οριστούν με μια συντομευμένη σημειογραφία που σου επιτρέπει και να δημιουργήσεις τον πίνακα και να ορίσεις τις τιμές του:

// Two equivalent ways to declare and initialize an array (size is 3)
int[] threeIntsV1 = new int[] { 4, 9, 7 };
int[] threeIntsV2 = { 4, 9, 7 };

Εφόσον ο μεταγλωττιστής μπορεί τώρα να καταλάβει πόσα στοιχεία θα έχει ο πίνακας, το μήκος μπορεί να παραλειφθεί.

Τα στοιχεία ενός πίνακα μπορούν να ανατεθούν και να προσπελαστούν χρησιμοποιώντας σημειογραφία θέσης με αγκύλες:

// Assign second element by index
twoInts[1] = 8;

// Retrieve the second element by index and assign to the int element
int secondElement = twoInts[1];

Η πρόσβαση σε μια θέση που είναι εκτός των έγκυρων θέσεων του πίνακα προκαλεί μια IndexOutOfBoundsException.

Μπορείς να χειριστείς τους πίνακες είτε καλώντας τις μεθόδους ή τις ιδιότητες ενός στιγμιοτύπου πίνακα, είτε χρησιμοποιώντας τις στατικές μεθόδους που ορίζονται στην κλάση Arrays (συνήθως χρησιμοποιούνται μόνο σε κώδικα με γενικούς τύπους). Η ιδιότητα length περιέχει το μήκος ενός πίνακα. Μπορείς να την προσπελάσεις ως εξής:

int arrayLength = someArray.length;

Η Java παρέχει επίσης μια χρήσιμη βοηθητική κλάση java.util.Arrays που έχει πολλές χρήσιμες μεθόδους για πίνακες (π.χ. Arrays.equals).

Η Java υποστηρίζει επίσης πολυδιάστατους πίνακες όπως int[][] arr = new int[3][4];, οι οποίοι μπορούν να φανούν πολύ χρήσιμοι.

Το γεγονός ότι ένας πίνακας είναι επίσης μια συλλογή σημαίνει ότι, εκτός από την πρόσβαση σε τιμές με τη θέση τους, μπορείς να διατρέξεις όλες τις τιμές του χρησιμοποιώντας έναν βρόχο for-each:

char[] vowels = { 'a', 'e', 'i', 'o', 'u' };

for(char vowel: vowels) {
    // Output the vowel
    System.out.print(vowel);
}

// => aeiou

Αν θέλεις περισσότερο έλεγχο στο ποιες τιμές θα διατρέξεις, μπορείς να χρησιμοποιήσεις έναν for βρόχο:

char[] vowels = { 'a', 'e', 'i', 'o', 'u' };

for (int i = 0; i < 3; i++) {
    // Output the vowel
    System.out.print(vowels[i]);
}

// => aei

Οδηγίες

Είσαι ένας φανατικός παρατηρητής πουλιών που παρακολουθεί πόσα πουλιά έχουν επισκεφτεί τον κήπο σου τις τελευταίες επτά ημέρες.

Έχεις έξι εργασίες, όλες σχετικές με τον αριθμό των πουλιών που επισκέφτηκαν τον κήπο σου.

1. Έλεγξε ποιες ήταν οι μετρήσεις την προηγούμενη εβδομάδα

Για λόγους σύγκρισης, κρατάς πάντα κοντά σου ένα αντίγραφο των μετρήσεων της προηγούμενης εβδομάδας, οι οποίες ήταν: 0, 2, 5, 3, 7, 8 και 4. Υλοποίησε τη μέθοδο BirdWatcher.getLastWeek() που επιστρέφει τις μετρήσεις της προηγούμενης εβδομάδας:

BirdWatcher.getLastWeek();
// => [0, 2, 5, 3, 7, 8, 4]

2. Έλεγξε πόσα πουλιά επισκέφτηκαν τον κήπο σήμερα

Υλοποίησε τη μέθοδο BirdWatcher.getToday() ώστε να επιστρέφει πόσα πουλιά επισκέφτηκαν τον κήπο σου σήμερα. Οι μετρήσεις των πουλιών είναι ταξινομημένες ανά ημέρα, με το πρώτο στοιχείο να είναι η μέτρηση της παλαιότερης ημέρας και το τελευταίο στοιχείο τη σημερινή μέτρηση.

int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.getToday();
// => 1

3. Αύξησε τη σημερινή μέτρηση

Υλοποίησε τη μέθοδο BirdWatcher.incrementTodaysCount() για να αυξήσεις τη σημερινή μέτρηση:

int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.incrementTodaysCount();
birdCount.getToday();
// => 2

4. Έλεγξε αν υπήρξε ημέρα χωρίς επισκέψεις πουλιών

Υλοποίησε τη μέθοδο BirdWatcher.hasDayWithoutBirds() που επιστρέφει true αν υπήρξε ημέρα κατά την οποία δεν επισκέφτηκε κανένα πουλί τον κήπο· διαφορετικά, επέστρεψε false:

int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.hasDayWithoutBirds();
// => true

5. Υπολόγισε τον αριθμό των πουλιών που επισκέφτηκαν τον κήπο για τις πρώτες ημέρες

Υλοποίησε τη μέθοδο BirdWatcher.getCountForFirstDays() που επιστρέφει τον αριθμό των πουλιών που επισκέφτηκαν τον κήπο σου από την αρχή της εβδομάδας, αλλά περιορίζει τη μέτρηση στον καθορισμένο αριθμό ημερών από την αρχή της εβδομάδας.

int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.getCountForFirstDays(4);
// => 14

6. Υπολόγισε τον αριθμό των πολυάσχολων ημερών

Κάποιες ημέρες είναι πιο πολυάσχολες από άλλες. Πολυάσχολη ημέρα είναι μία κατά την οποία πέντε ή περισσότερα πουλιά έχουν επισκεφτεί τον κήπο σου. Υλοποίησε τη μέθοδο BirdWatcher.getBusyDays() για να επιστρέψεις τον αριθμό των πολυάσχολων ημερών:

int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.getBusyDays();
// => 2
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Java Exercism

Έτοιμος να ξεκινήσεις την άσκηση Παρατηρητής πουλιών;

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