Projet Zuul de conception orientée objet en Java d'un jeu d'aventure
Forum des exercices du projet Zuul
7.9
- Lire la suite du chapitre 7 [ci-joint] (si possible en anglais, sinon en français).
AIDE : a += b; est équivalent à a = a + b; - Relire la ressource A3P(AL) sur la HashMap
AIDE : Comme la classe HashMap, la classe Set doit être importée avant d'être utilisée :
import java.util.LaClasse;
- Look up the keySet method in the documentation of HashMap. What does it do ?
(key=clé, set=ensemble)
Explications sur la forme for ( X y : z ) qui n'a rien à voir avec la forme for ( x ; y ; z ) :
- Cette boucle est appelée boucle for each (pour chaque), mais on n'écrit pas le each, juste for.
- On la distingue aisément de l'autre forme, car elle n'a pas 2 séparateurs ; mais un seul séparateur :
- z est la collection que l'on veut parcourir, par exemple un ensemble de String retourné par la fonction keySet.
- X est le Type des éléments de la collection, donc le type de chaque élément qu'on va extraire de cette collection, par exemple String.
- y est un nom de variable pour contenir à chaque tour de boucle l'élément suivant de la collection :
X y constitue donc une déclaration de variable de type X, par exemple String vExit - for ( String vExit : vExits ) se lit : pour chaque chaîne de caractères vExit de la collection vExits, faire ...
Bonjour,
J'ai deux problèmes que je n'arrive pas à résoudre.
J'ai un souci de compilation avec ce code, il est dit que le compilateur ne trouve pas la classe Set.
Mais également, je ne comprend pas la formulation du code en Gras :
.../... code supprimé pour ne pas influencer les futurs lecteurs .../...
for(String exit : keys)
.../... code supprimé pour ne pas influencer les futurs lecteurs .../...En effet, il faut que tu l'inclut dans ta classe. Pour ce faire, tu dois regarder dans la javadoc sur internet dans quel package est présent la classe. Je crois que c'est dans le package util. (include java.util.Set;).
La commande en gras est un for each. Elle permet de récupèrer toutes les strings associes à aExit. Chaque tour de la boucle, elle récupère une String de keys qui est stoqué dans exit. keys est une collection contenant tous les strings associes aux sorties. La méthode keySet() a permis de récupérer toutes les Strings de la hashmapde aExit.
Un étudiant a écrit :
J'ai donc bien compris l'exercice 7.7 et j'ai aussi réussis le 7.9 cependant j'aurai une question de compréhension.
Set<String> keys = exits.keySet();
Je comprends que les clés de l'objet Hashmap doivent être de type String cependant je ne comprends pas le Set<> et le "exits."
Effectivement, ce code serait plus facile à comprendre s'il était écrit avec les conventions de l'unité IGI-3007 :
Set<String> vKeys = this.aExits.keySet();
- exits n'est autre que la HashMap des sorties qui a été déclarée en attribut
- Set (en français, 'ensemble' au sens mathématique)
est un container d'éléments de même type, mais qui, comme en maths, ne
peut pas contenir 2 fois le même élément.
Un étudiant a écrit :
En effet, quand je met la ligne de code :
"Set<String> vKeys = this.exits.keySet();"
je ne comprend pas par quoi la remplacer ou si je dois créer une classe Set.
Ni la remplacer, ni la créer !
Comme nous l'avons vu au cours 3, la classe Set est une classe du JDK qui sert à représenter/manipuler des ensembles.
Comme nous l'avons vu au cours 3, les classes Scanner, HashMap,
et ici Set (et bientôt d'autres) sont dans un répertoire spécial,
et il est nécessaire de les importer au début de votre fichier .java.
Bonjour M. Bureau,
j'ai très bien compris l'exercice, cependant j'ai une proposition de modification du code de la méthode getExitString que j'aimerai que vous validiez si elle est correcte :
public String getExitString() {
StringBuilder vStr = new StringBuilder();
vStr.append(this.getDescription()+"\n");
vStr.append("Exits: ");
for (Map.Entry vEntry : aExits.entrySet()) {
if(vEntry.getValue()!=null) { vStr.append(vEntry.getKey()+" "); }
}
return vStr.toString();
} // getExitString()
- j'utilise un StringBuilder car l'exécution est plus rapide lors d'une boucle au lieu de faire vMaString += "blabla"
- je test si la valeur est null avant d'ajouter la clé ( je ne sais si cela est nécessaire )
- L'idée d'utiliser un StringBuilder est bonne, mais ne sera vue qu'à l'exercice 18.2.
- L'idée d'utiliser Map.Entry est à mon avis mauvaise, car moins claire que la syntaxe directe proposée dans le livre ; ce concept ne sera pas vu dans cette unité.
- Le test de null n'est nécessaire que si vous avez stocké cette «valeur» dans la HashMap, ce qui n'est pas prévu a priori.
Réseaux sociaux