Parcours
/
Java
Java
/
Exercices
/
Attrape-les tous
Attrape-les tous

Attrape-les tous

Exercice d'apprentissage

Introduction

Les ensembles

Un Set est une collection non ordonnée qui, contrairement à List, ne contient aucun doublon.

Le paramètre de type générique de l'interface Set désigne le type des éléments contenus dans l'ensemble :

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

Note que la méthode Set.of() crée une instance de Set non modifiable. Essayer d'appeler des méthodes comme add et remove sur cette instance provoquera une exception à l'exécution.

Pour créer un Set modifiable, il faut instancier une classe qui implémente l'interface Set. La classe intégrée la plus utilisée qui implémente cette interface est la classe HashSet.

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

L'interface Set hérite des interfaces Collection et Iterable, et partage donc de nombreuses méthodes avec d'autres types de collections. Une différence notable avec l'interface Collection, cependant, est que des méthodes comme add et remove renvoient un boolean (au lieu de void), qui indique si l'élément était présent dans l'ensemble au moment de l'appel à cette méthode :

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

Instructions

Ta nostalgie des cartes Blorkemon™️ ne montre aucun signe de ralentissement : tu as même recommencé à les collectionner, et tu entraînes tes amis avec toi.

Dans cet exercice, tu vas utiliser l'interface Set pour t'aider à gérer ta collection, car les cartes en double n'ont pas d'importance quand ton objectif est d'obtenir toutes les cartes existantes.

1. Commence une collection

Tu viens de retrouver ta vieille réserve de cartes Blorkemon™️ ! Cette réserve contient un tas de cartes en double, il est donc temps de commencer une nouvelle collection en supprimant les doublons.

Tu veux vraiment que tes amis rejoignent ta folie Blorkemon™️, et la meilleure façon de faire est de lancer leur collection en leur donnant une carte.

Implémente la méthode newCollection, qui transforme une liste de cartes en un Set représentant ta nouvelle collection.

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

2. Fais grandir la collection

Une fois que tu as une collection, elle prend vie et doit grandir.

Implémente la méthode addCard, qui prend une nouvelle carte et ton ensemble actuel de cartes collectionnées. La méthode doit ajouter la nouvelle carte à la collection si elle n'y est pas déjà présente, et doit renvoyer un boolean indiquant si la collection a été mise à jour.

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

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

3. Commence à échanger

Tu veux vraiment que tes amis rejoignent ta folie Blorkemon™️, alors il est temps de commencer à échanger !

Lorsque tu échanges avec des amis, tous les échanges ne valent pas la peine d'être faits, ou ne sont pas possibles. Tu ne dois échanger que si ton ami et toi possédez chacun une carte que l'autre n'a pas.

Implémente la méthode canTrade, qui prend ta collection actuelle et la collection d'un de tes amis. Elle doit renvoyer un boolean indiquant si un échange est possible, en suivant les règles ci-dessus.

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

4. Identifie les cartes communes

Tes amis passionnés de Blorkemon™️ et toi vous réunissez et vous vous demandez quelles cartes sont les plus communes.

Implémente la méthode commonCards, qui prend une liste de collections et renvoie une collection des cartes que toutes les collections ont en commun.

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

5. Toutes les cartes

Est-ce que tes amis et toi possédez collectivement toutes les cartes Blorkemon™️ ?

Implémente la méthode allCards, qui prend une liste de collections et renvoie une collection de toutes les cartes différentes présentes dans l'ensemble des collections réunies.

GottaSnatchEmAll.allCards(List.of(Set.of("Scientuna"), Set.of("Newthree","Scientuna")));
// => {"Newthree", "Scientuna"}
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Java Exercism

Prêt à commencer Attrape-les tous ?

Inscris-toi sur Exercism pour apprendre et maîtriser Java avec 26 concepts158 exercices, et un vrai mentorat humain, le tout gratuitement.