Soucis d'insertion d'objet dans un vector et sa taille [Résolu]

Signaler
Messages postés
67
Date d'inscription
samedi 10 septembre 2005
Statut
Membre
Dernière intervention
8 juillet 2008
-
Messages postés
67
Date d'inscription
samedi 10 septembre 2005
Statut
Membre
Dernière intervention
8 juillet 2008
-
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

Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
24
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
Messages postés
67
Date d'inscription
samedi 10 septembre 2005
Statut
Membre
Dernière intervention
8 juillet 2008

Je complète : le THIS dans la méthode INSERER représente un objet de type PRODUIT(String itemA, String itemB, String itemC).

JeanMi66
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
24
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
Messages postés
67
Date d'inscription
samedi 10 septembre 2005
Statut
Membre
Dernière intervention
8 juillet 2008

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
Messages postés
694
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
8 janvier 2014
15
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);
}
Messages postés
694
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
8 janvier 2014
15
Produit.liste.add(produit);
Messages postés
67
Date d'inscription
samedi 10 septembre 2005
Statut
Membre
Dernière intervention
8 juillet 2008

Ok, vous m'avez bien aidé, merci encore !

JeanMi66