cs_JeanMi66
Messages postés67Date d'inscriptionsamedi 10 septembre 2005StatutMembreDernière intervention 8 juillet 2008
-
8 juil. 2008 à 08:58
cs_JeanMi66
Messages postés67Date d'inscriptionsamedi 10 septembre 2005StatutMembreDerniè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());
}
}
cs_laurent1024
Messages postés987Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention30 août 201225 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.
cs_laurent1024
Messages postés987Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention30 août 201225 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).
cs_JeanMi66
Messages postés67Date d'inscriptionsamedi 10 septembre 2005StatutMembreDerniè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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_AlexN
Messages postés694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 201419 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);
}