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

cs_JeanMi66 67 Messages postés samedi 10 septembre 2005Date d'inscription 8 juillet 2008 Dernière intervention - 8 juil. 2008 à 08:58 - Dernière réponse : cs_JeanMi66 67 Messages postés samedi 10 septembre 2005Date d'inscription 8 juillet 2008 Dernière intervention
- 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
Afficher la suite 

7 réponses

Répondre au sujet
cs_laurent1024 987 Messages postés mardi 31 mai 2005Date d'inscription 30 août 2012 Dernière intervention - 8 juil. 2008 à 10:54
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_laurent1024
cs_JeanMi66 67 Messages postés samedi 10 septembre 2005Date d'inscription 8 juillet 2008 Dernière intervention - 8 juil. 2008 à 09:16
0
Utile
Je complète : le THIS dans la méthode INSERER représente un objet de type PRODUIT(String itemA, String itemB, String itemC).

JeanMi66
Commenter la réponse de cs_JeanMi66
cs_laurent1024 987 Messages postés mardi 31 mai 2005Date d'inscription 30 août 2012 Dernière intervention - 8 juil. 2008 à 09:57
0
Utile
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
Commenter la réponse de cs_laurent1024
cs_JeanMi66 67 Messages postés samedi 10 septembre 2005Date d'inscription 8 juillet 2008 Dernière intervention - 8 juil. 2008 à 10:40
0
Utile
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
Commenter la réponse de cs_JeanMi66
cs_AlexN 719 Messages postés lundi 5 décembre 2005Date d'inscription 8 janvier 2014 Dernière intervention - 8 juil. 2008 à 11:47
0
Utile
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);
}
Commenter la réponse de cs_AlexN
cs_AlexN 719 Messages postés lundi 5 décembre 2005Date d'inscription 8 janvier 2014 Dernière intervention - 8 juil. 2008 à 11:48
0
Utile
Produit.liste.add(produit);
Commenter la réponse de cs_AlexN
cs_JeanMi66 67 Messages postés samedi 10 septembre 2005Date d'inscription 8 juillet 2008 Dernière intervention - 8 juil. 2008 à 11:55
0
Utile
Ok, vous m'avez bien aidé, merci encore !

JeanMi66
Commenter la réponse de cs_JeanMi66

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.