Διαδρομές
/
Java
Java
/
Ασκήσεις
/
Πιάσε τα όλα
Πιάσε τα όλα

Πιάσε τα όλα

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

Εισαγωγή

Σύνολα

Ένα Set είναι μια συλλογή χωρίς σειρά που, σε αντίθεση με τη List, είναι εγγυημένο ότι δεν περιέχει διπλότυπες τιμές.

Η παράμετρος γενικού τύπου της διεπαφής Set δηλώνει τον τύπο των στοιχείων που περιέχει το Set:

Set<Integer> ints = Set.of(1, 2, 3);
Set<String> strings = Set.of("alpha", "beta", "gamma");
Set<Object> mixed = Set.of(1, false, "foo");

Σημείωσε ότι η μέθοδος Set.of() δημιουργεί ένα μη τροποποιήσιμο στιγμιότυπο Set. Αν προσπαθήσεις να καλέσεις μεθόδους όπως add και remove σε αυτό το στιγμιότυπο, θα προκληθεί εξαίρεση κατά την εκτέλεση.

Για να φτιάξεις ένα τροποποιήσιμο Set, χρειάζεται να δημιουργήσεις στιγμιότυπο μιας κλάσης που υλοποιεί τη διεπαφή Set. Η πιο συχνά χρησιμοποιούμενη ενσωματωμένη κλάση που υλοποιεί αυτή τη διεπαφή είναι η κλάση HashSet.

Set<Integer> ints = new HashSet<>();

Η διεπαφή Set επεκτείνει τις διεπαφές Collection και Iterable, και επομένως μοιράζεται πολλές μεθόδους με άλλους τύπους συλλογών. Μια αξιοσημείωτη διαφορά, ωστόσο, από τη διεπαφή Collection είναι ότι μέθοδοι όπως add και remove επιστρέφουν ένα boolean (αντί για void) που δηλώνει αν το στοιχείο υπήρχε στο σύνολο όταν κλήθηκε η μέθοδος:

Set<Integer> set = new HashSet<>();
set.add(1);
// => true
set.add(2);
// => true
set.add(1);
// => false
set.size();
// => 2
set.contains(1);
// => true
set.contains(3);
// => false
set.remove(3);
// => false
set.remove(2);
// => true
set.size();
// => 1

Οδηγίες

Η νοσταλγία σου για τις κάρτες Blorkemon™️ δε δείχνει σημάδια ύφεσης, άρχισες μάλιστα να τις συλλέγεις ξανά και βάζεις και τους φίλους σου να σε ακολουθήσουν.

Σε αυτή την άσκηση, θα χρησιμοποιήσεις το interface Set για να σε βοηθήσει να διαχειριστείς τη συλλογή σου, αφού οι διπλότυπες κάρτες δεν έχουν σημασία όταν ο στόχος σου είναι να αποκτήσεις όλες τις υπάρχουσες κάρτες.

1. Ξεκίνα μια συλλογή

Μόλις βρήκες το παλιό σου απόθεμα από κάρτες Blorkemon™️! Το απόθεμα περιέχει ένα σωρό διπλότυπες κάρτες, οπότε ήρθε η ώρα να ξεκινήσεις μια νέα συλλογή αφαιρώντας τα διπλότυπα.

Θέλεις πραγματικά οι φίλοι σου να μπουν στην τρέλα σου με τα Blorkemon™️, και ο καλύτερος τρόπος είναι να τους ξεκινήσεις τη συλλογή χαρίζοντάς τους μία κάρτα.

Υλοποίησε τη μέθοδο newCollection, η οποία μετατρέπει μια λίστα από κάρτες σε ένα Set που αντιπροσωπεύει τη νέα σου συλλογή.

GottaSnatchEmAll.newCollection(List.of("Newthree", "Newthree", "Newthree"));
// => {"Newthree"}

2. Μεγάλωσε τη συλλογή

Μόλις αποκτήσεις μια συλλογή, αυτή αποκτά δική της ζωή και πρέπει να μεγαλώσει.

Υλοποίησε τη μέθοδο addCard, η οποία παίρνει μια νέα κάρτα και το τρέχον σύνολο των συλλεγμένων καρτών σου. Η μέθοδος θα πρέπει να προσθέτει τη νέα κάρτα στη συλλογή αν δεν υπάρχει ήδη και να επιστρέφει ένα boolean που δείχνει αν η συλλογή ενημερώθηκε.

Set<String> collection = GottaSnatchEmAll.newCollection("Newthree");
GottaSnatchEmAll.addCard("Scientuna",collection);
// => true

collection.contains("Scientuna");
// => true

3. Ξεκίνα τις ανταλλαγές

Θέλεις πραγματικά οι φίλοι σου να μπουν στην τρέλα σου με τα Blorkemon™️, οπότε ήρθε η ώρα να ξεκινήσεις τις ανταλλαγές!

Όταν κάνεις ανταλλαγές με φίλους, δεν αξίζει κάθε ανταλλαγή, ούτε είναι πάντα εφικτή. Θα πρέπει να κάνεις ανταλλαγή μόνο αν τόσο εσύ όσο και ο φίλος σου έχετε μια κάρτα που ο άλλος δεν έχει.

Υλοποίησε τη μέθοδο canTrade, η οποία παίρνει την τρέχουσα συλλογή σου και τη συλλογή ενός από τους φίλους σου. Θα πρέπει να επιστρέφει ένα boolean που δείχνει αν μια ανταλλαγή είναι εφικτή, σύμφωνα με τους παραπάνω κανόνες.

Set<String> myCollection = Set.of("Newthree");
Set<String> theirCollection = Set.of("Scientuna");
GottaSnatchEmAll.canTrade(myCollection, theirCollection);
// => true

4. Εντόπισε τις κοινές κάρτες

Εσύ και οι φίλοι σου που τρελαίνεστε με τα Blorkemon™️ μαζεύεστε και αναρωτιέστε ποιες κάρτες είναι οι πιο κοινές.

Υλοποίησε τη μέθοδο commonCards, η οποία παίρνει μια λίστα από συλλογές και επιστρέφει μια συλλογή με τις κάρτες που έχουν όλες οι συλλογές.

GottaSnatchEmAll.commonCards(List.of(Set.of("Scientuna"), Set.of("Newthree","Scientuna")));
// => {"Scientuna"}

5. Όλες οι κάρτες

Έχετε εσύ και οι φίλοι σου συνολικά όλες τις κάρτες Blorkemon™️;

Υλοποίησε τη μέθοδο allCards, η οποία παίρνει μια λίστα από συλλογές και επιστρέφει μια συλλογή με όλες τις διαφορετικές κάρτες από όλες τις συλλογές μαζί.

GottaSnatchEmAll.allCards(List.of(Set.of("Scientuna"), Set.of("Newthree","Scientuna")));
// => {"Newthree", "Scientuna"}
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Java Exercism

Έτοιμος να ξεκινήσεις την άσκηση Πιάσε τα όλα;

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