Soucis d'insertion d'objet dans un vector et sa taille

Résolu
cs_JeanMi66 Messages postés 67 Date d'inscription samedi 10 septembre 2005 Statut Membre Dernière intervention 8 juillet 2008 - 8 juil. 2008 à 08:58
cs_JeanMi66 Messages postés 67 Date d'inscription samedi 10 septembre 2005 Statut Membre Dernière intervention 8 juillet 2008 - 8 juil. 2008 à 11:55
Bonjour à tous,

je dispose d'une classe contenant un VECTOR qui au premier objet (composé de 3 attributs) que je lui ajoute, créé bien la première case du VECTOR avec cet objet, mais quand je rajoute encore un élément, il écrase celui-ci et met le nouveau par dessus. Je le sais parceque je demande un affichage de la case indexée 0 du vector et à chaque ajout, la valeur de celle-ci change et renvoi le nouvel objet qui écrase l'ancien or si le tableau était bien incrémenté, la valeur de la première case resterait bien la même ! Mais encore plus bizarre, si je demande l'affichage de la taille du VECTOR, il me donne un size à 0 !!!!

Là, j'y comprend plus rien ! Merci de votre aide, voici un extrait de cette fameuse classe...

public class Produit {
   
    private String itemA, itemB, itemC;
   
    public Produit (String itemA, String itemB, String itemC){
        this.itemA = itemA;
        this.itemB = itemB;
        this.itemC = itemC;
    }
   
    public Produit (String itemA, String itemB){
        this.itemA = itemA;
        this.itemB = itemB;
    }
    
   //Un accesseur-------------
   public String getItemA() {
        return itemA;
    }

    public String toString(){
        return(getItemA());
    }
    
    Vector liste = new Vector();
   
    //Les methodes de l'objet-----------------------
    //----------------------------------------------
    public String inserer(){
        liste.addElement(this);
        return(system.out.print(liste.get(0).toString())+" et un vector de longueur "+liste.size());
    }
}

JeanMi66

7 réponses

cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
8 juil. 2008 à 10:54
C'est normal que le tableau reste toujours a 1.
La liste est dans le produit !!
Du coup a chaque fois que tu crées un objet produit, tu créés un objet membre "liste".
en gros si tu fais
Produit pa = new Produit("A","A","A","A");
pa.inserer();
Produit pb = new Produit("B","B","B","B");

pb.inserer();
tu va avoir dans pa une liste contenant l'objet pa
et dans pb une liste contenant l'objet pb.

Cdt
3
cs_JeanMi66 Messages postés 67 Date d'inscription samedi 10 septembre 2005 Statut Membre Dernière intervention 8 juillet 2008
8 juil. 2008 à 09:16
Je complète : le THIS dans la méthode INSERER représente un objet de type PRODUIT(String itemA, String itemB, String itemC).

JeanMi66
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
8 juil. 2008 à 09:57
Bonjour
Essayes de replacer le new Vector(); par new Vector(100); (une taille par déafaut).

Remarque : Il me semble que l'utilisation des vectors est déprécié depuis la version 2 de Java, utilise plutôt un Arraylist, ou un linkedlist (qui est peut être plus adapté si tu ajoute de élemnents sans savoir combien il y en a).

Cdt
0
cs_JeanMi66 Messages postés 67 Date d'inscription samedi 10 septembre 2005 Statut Membre Dernière intervention 8 juillet 2008
8 juil. 2008 à 10:40
Non, ça fonctionne pas ! Même en remplaçant par un ArrayList, mon principal soucis est que le tableau ne s'incrémente pas et reste à 1 pour sa size (avant, c'était 0). A chaque fois que j'insère, il écrase donc la première case et la remplace par le nouvel objet inséré. Vous savez pourquoi ?

JeanMi66
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
8 juil. 2008 à 11:47
Salut,

Tel que c'est écrit, la propriété liste est une propriété d'instance et non de classe. Ce qui signifie que pour chaque instance de la classe produit, une nouvelle liste est créée. Et chacune contiendra toujours un seul objet, l'instance elle même.

Pour avoir une seule liste accessible à toutes les instances de classe, mettre la variable list en static (variable de classe) :

private static Vector liste = new Vector();

et la méthode inserer devient aussi une méthode de classe :

public static String inserer(Produit produit) {
   liste.add(produit);
   // autre syntaxe
   // Produit.liste.inserer(produit);
}
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
8 juil. 2008 à 11:48
Produit.liste.add(produit);
0
cs_JeanMi66 Messages postés 67 Date d'inscription samedi 10 septembre 2005 Statut Membre Dernière intervention 8 juillet 2008
8 juil. 2008 à 11:55
Ok, vous m'avez bien aidé, merci encore !

JeanMi66
0
Rejoignez-nous