Projet Zuul de conception orientée objet en Java d'un jeu d'aventure
Forum des exercices du projet Zuul
Exercice 7.18
- Lisez la suite du chapitre 7 [ci-joint] (si possible en anglais, sinon en français).
- Implement the suggested change. Make sure that your program still works as before.
- Vous devez comprendre que la création de getcommandList
procède de la même idée que la création de getExitString
à l'exercice 7.7 : produire l'information au plus près et l'utiliser ailleurs.
- Il y a 3 classes en jeu ici : l'une produit l'information, la 2ème la transmet simplement, et la dernière l'affiche.
Attention ! Une méthode dont le nom commence par get ne doit rien afficher, et le nom d'une méthode qui retourne quelque chose sans l'afficher ne doit pas commencer par show.
Bonsoir, est-ce que déclarer la méthode getCommandList en static et l'utiliser directement sur la classe dans game avec System.out.println(CommandWords.getCommandList()); est bon ?
Ce pourrait effectivement être une solution, mais cela ne semble pas être l'esprit de ce qui nous est déjà fourni :
- la classe CommandWords semble devoir être instanciée puisqu'elle possède une méthode d'instance
- la classe Parser crée effectivement un objet CommandWords
Je vous suggère donc de faire de même, d'autant que cela permettrait de changer les commandes reconnues selon certains évènements du jeu.
Pour éviter d'avoir à créer un 2ème objet CommandWords, il est possible de créer aussi une fonction getCommandList dans le Parser (qui elle s'adresserait à son objet CommandWords).
Un étudiant a écrit :
Après avoir passé l'exercice 7.16 sans encombre "showAll()" et "showCommands"
Voici mon code :
[code java retiré pour ne pas influencer les futurs lecteurs]
[code java retiré pour ne pas influencer les futurs lecteurs]
En compilant la classe GAME j'ai l'erreur "non-static method getCommands() cannot be referenced from a static context "
Je ne sais vraiment pas comment la resoudre j'ai essayer de mettre getCommands() en static mais rien n'y fait.
Pouvez vous me donner un coup de pouce ?
Cordialement
Le problème vient de la ligne : Parser.getCommand();
Qu'est-ce que Parser ? Une classe.
Donc le compilateur vous dit que getCommand() doit être statique.
Mais si getCommand() avait dû être statique, on l'aurait écrite ainsi !
Pour appeler une méthode non statique, il faut un objet, pas une classe. N'avez-vous pas un objet de la classe Parser "sous la main" ?
Quand vous aurez résolu ce problème de compilation, vous constaterez que la liste des commandes ne s'affiche pas. Mais où avez-vous écrit une instruction d'affichage de la liste des commandes ? Nulle part.
Problème résolut merci !
Mais bon un souci en cache un autre, désormais je n'ai que le dernier mot de mon tableau sValidCommands qui s'affiche
J'en conclu donc que le souci viens de :
public String getCommandList()
{
String vString="";
for(String vCommand : sValidCommands){
vString = " " +vCommand;
}
return vString;
À chaque tour de boucle, vous mettez dans vString la commande suivante du tableau ; il est donc normal qu'après le dernier tour de boucle, vous ayez dans vString la dernière commande du tableau.
À chaque tour de boucle, il faudrait vous débrouiller pour ajouter une nouvelle commande à vString plutôt que de la remplacer par cette nouvelle commande.
Un étudiant a écrit :
Votre fonction getCommandList() est parfaite (sauf qu'elle n'a pas à être static ; voir aussi le forum de l'exercice 7.16).
Mais si dans la classe Parser,
vous remplacez une procédure void proc() { System.out.println( "Hello !" ); }
par une fonction String fonc() { return "Hello !"; }
en remplaçant juste dans la classe Game
l'appel aParser.proc(); par aParser.fonc();
il ne faut pas vous étonner que ça n'affiche plus rien ...
Cela vous permet-il de comprendre ce que vous avez oublié de faire ?
Réseaux sociaux