IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Structure de données pour ne pas redéfinir 2 fois la même méthode.


Sujet :

avec Java

  1. #1
    Membre confirmé Avatar de ben.IT
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 431
    Points : 486
    Points
    486
    Par défaut Structure de données pour ne pas redéfinir 2 fois la même méthode.
    Bonjour à tous,
    je débute en JAVA et je dois réaliser un petit jeu. Dans le jeu, il y a une classe Room qui gère les pièces et une classe Character qui gère les personnages.

    Une Room peut avoir des objets de la classe Item que le Character peut ramasser.
    Il y a donc un tableau de Item dans mes classes ROOM et Character.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     private ArrayList<Item> item_col;
    Je ne sais pas comment définir une méthode qui affiche tous les objets d'une liste d'objet sans la redéfinir 2 fois (une fois dans la classe ROOM et une fois dans la classe Character).

    Faut il faire une classe a part qui gère les listes d'objets ??


    pour info, voici ma fonction d'affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        public String showAllItem () {
        	String txt = new String ("There is/are "+list.size()+" item(s).\n " );
        	for(int i=0;i<list.size();i++)
        	{
        		txt+=list.get(i).showItem();
        	}
        	return txt;
        }
    Si quelqu'un a une idée...
    merci d'avance.
    cordialement,
    benilto

  2. #2
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Bonsoir,
    je dirais qu'il y a deux façons de procéder :
    1. soit tu encapsules la collection d'Items dans une classe Inventaire faite pour ça ;
    2. soit tu définis une méthode statique quelque part dans une classe helper.

    Le second cas est le plus simple mais le moins "objet" (j'ai modifié le code de la méthode showAllItem pour utiliser StringBuilder en lieu et place de String, voir la FAQ sur ce point ; et pour utiliser la boucle for étendue) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class ItemHelper {
     
       public static String showAllItem(List<Item> listItems) {
          StringBuilder sb = new StringBuilder(200); // ou plus
          sb.append("There is/are ").append(listItems.size()).append(" item(s).\n");
          for (Item item : listItems) {
             sb.append(item.showItem());
          }
          return sb.toString();
       }
    }
    La première solution consiste à abstraire la liste des Items dans une classe Inventaire, ainsi tu peux définir des méthodes spécifiques qui vont jouer sur la liste d'Items :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    class Inventaire {
     
       private List<Item> listItems = new ArrayList<Item>();
     
       public void add(Item item) {
          // contrôles sur item...
          listItems.add(item);
       }
     
       public void remove(Item item) {
          listItems.remove(item);
       }
     
       public void take(Item item, Inventaire from) {
          from.remove(item);
          add(item);
       }
     
       public void leave(Item item, Inventaire to) {
          remove(item);
          to.add(item);
       }
     
       ...
     
       // showAllItem() = toString() ?
       public String showAllItem() {
          StringBuilder sb = new StringBuilder(200); // ou plus
          sb.append("There is/are ").append(listItems.size()).append(" item(s).\n");
          for (Item item : listItems) {
             sb.append(item.showItem());
          }
          return sb.toString();
       }
     
    }

  3. #3
    Membre confirmé Avatar de ben.IT
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 431
    Points : 486
    Points
    486
    Par défaut
    en réfléchissant un peu, j'ai créé une classe ItemList qui gère la collection d'objets et ça marche pas mal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    package item;
     
    import java.util.ArrayList;
    /**
     * @author 
     */
     
    public class ItemList {
     
    	/**
             * 
             */
    	private ArrayList<Item> list;//the arraylist of item
     
     
    	/**Constructor
             *
             */
    	public ItemList () 
    	{
    		this.list = new ArrayList<Item> ();
    	}
     
    	/**
             * 
             * @return a string which contain the description of the item list
             */
        public String showItemList () {
        	String txt = new String ("There is/are "+list.size()+" item(s) in this room.\n " );
        	for(int i=0;i<list.size();i++)
        	{
        		txt+=list.get(i).showItem();
        	}
        	return txt;
        }
     
     
        /**
         * add an item in a ItemList
         * @param i
         */
        public void addItem (Item i) {
     
        	this.list.add(i);
        }
     
    /**
     * Getters & setters
     * @return
     */
    	public ArrayList<Item> getList() {
    		return list;
    	}
     
     
    	public void setList(ArrayList<Item> list) {
    		this.list = list;
    	}
     
     
    }//end

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quelle structure de données pour mon projet ?
    Par stallaf dans le forum Langage
    Réponses: 4
    Dernier message: 13/04/2010, 17h12
  2. Réponses: 3
    Dernier message: 17/03/2009, 11h41
  3. Réponses: 2
    Dernier message: 09/08/2008, 13h30
  4. Structure de données pour gros volume de données
    Par white_angel_22 dans le forum Langage
    Réponses: 9
    Dernier message: 01/02/2007, 11h58
  5. Structure de données pour recherche rapide
    Par socrate dans le forum C
    Réponses: 1
    Dernier message: 18/06/2006, 14h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo