Projet Zuul de conception orientée objet en Java d'un jeu d'aventure
Forum des exercices du projet Zuul
Exercice 7.35.1
Non, le switch est clairement la structure la plus appropriée pour gérer une variable de type enum.
L'API reflection de Java est une grosse machinerie peu performante, et il faudra y regarder à deux fois si vous trouvez une fonctionnalité du jeu pour laquelle elle pourrait avoir un intérêt.
Bonjour,
Après avoir ecrit le switch, le compilateur nous indique un message d'erreur : " an enum switch case label must be the unqualified name of a enumeration constant"
CommandWord commandWord = command.getCommandWord();
switch(commandWord){
case CommandWord.aide :
aide();
break;
L'expression à tester et la valeur sont bien des commandWord.
Bonjour,
j'ai un problème qui concerne le switch.
Dans interpretCommand j'ai :
aGui.println(pCommandLine);
Command vCommand = aParser.getCommand(pCommandLine);
CommandWord vCommandWord = vCommand.getCommandWord();
switch(vCommandWord)
{
.../... code supprimé .../...
case UNKNOWN : aGui.println("Cette commande n'existe pas");
break;
.../... code supprimé .../...
}
Mais quand je lance le jeu, quelque soit les commandes que je rentre, ça m'affiche "Cette commande n'existe pas", donc la commande est inconnue.
Je pense que le pb ne vient pas du code ci-dessus, mais de l'endroit où votre programme décide de choisir le CommandWord UNKNOWN en fonction de la String que vous avez tapée. Les String dans CommandWords sont-elles correctes ?
Il me semble qu'elles le sont, j'ai comme constructeur par défault de la classe CommandWords :
public CommandWords()
{
this.aValidCommands = new HashMap<String, CommandWord>();
this.aValidCommands.put("go", CommandWord.GO);
.../... code supprimé .../...
}
Ce qui permet d'initialiser la HashMap aValidCommands.
Et pour reconnaître la commande tapé :
public CommandWord getCommandWord(final String pCommandWord)
{
CommandWord vCommand = this.aValidCommands.get(pCommandWord);
if(vCommand != null)
{
return vCommand;
}
else
{
return CommandWord.UNKNOWN;
}
}
Qui doit normalement retourner la commande UNKNOWN si la commande est inconnue et retourner la commande passé en paramètre si elle est connue.
Si getCommandWord retourne UNKNOWN, c'est que vCommand vaut null, donc que la String pCommandWord n'a pas été trouvée dans la HashMap.
Ajoutez au début de la méthode getCommandWord un affichage de pCommandWord, et s'il est correct, un affichage de this.aValidCommands qui vous montrera toutes les associations stockées dans la HashMap.
Cela devrait vous aider à comprendre d'où vient le problème.
Réseaux sociaux