Bonjour,
J'ai un problème que je pense de base dont je vois d'ou il vient mais je ne sais pas comment y remédier :
J'ai le modèle suivant : Livre étends Article et Livre posssède un champ de type Personne : dans mon exemple Livre est nommé LivreC3 , Article ArticleC et Personne PersonneC
Classe Livre :
Classe Article
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82 import java.time.LocalDate; import java.util.ArrayList; public class LivreC3 extends ArticleC { private String isbn; private int nbPages; private PersonneC auteur; Champ auteur de type PersonneC public LivreC3() { super(); } public LivreC3(int reference,String designation,double prix,String isbn,int nbPages) { super(reference,designation,prix); setIsbn(isbn); setNbPages(nbPages); } //Constructeur à ne plus utiliser ne gère pas la liste des oeuvres et utilise variable de classe dans fonction public LivreC3(int reference,String designation,double prix,String isbn,int nbPages,String nom,String prenom,LocalDate dnaiss) { super(reference,designation,prix); setIsbn(isbn); setNbPages(nbPages); auteur=new PersonneC(); auteur.setNom(nom); auteur.setPrenom(prenom); auteur.setDate_nais(dnaiss); } public LivreC3(int reference,String designation,double prix,String isbn,int nbPages,PersonneC auteur) { super(reference,designation,prix); setIsbn(isbn); setNbPages(nbPages); setAuteur(auteur); } public String getIsbn() { return isbn; } public void setIsbn(String isbn) { this.isbn = isbn; } public int getNbPages() { return nbPages; } public void setNbPages(int nbPages) { this.nbPages = nbPages; } public PersonneC getAuteur() { return auteur; } /* public void setAuteur(PersonneC auteur) { this.auteur = auteur; } */ public void setAuteur(PersonneC auteur) { this.auteur = auteur; ArrayList<ArticleC> lst; // lst=new ArrayList<> (); lst=auteur.getoeuvresList(); if (!lst.contains(this)) { lst.add(this); } } public String toString() { return super.toString() + " Nbre Pages : " + getNbPages() + " Auteur : " + getAuteur(); } }
Classe Personne :
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
62
63
64
65
66 public class ArticleC { private int reference; private String designation; private double prix; public ArticleC() { super(); } public ArticleC(int reference) { this(); setReference(reference); } public ArticleC(int reference,String designation) { this(reference); setDesignation(designation); } public ArticleC(int reference,String designation, double prix) { this(reference,designation); setPrix(prix); } public int getReference() { return reference; } public void setReference(int reference) { this.reference = reference; } public String getDesignation() { return designation; } public void setDesignation(String designation) { this.designation = designation; } public double getPrix() { return prix; } public void setPrix(double prix) { this.prix = prix; } public String toString() { return "Référence : "+ getReference() + " Désignation : " + getDesignation() + " Prix : " + getPrix() + " "; } }
A l'exécution :
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 import java.time.LocalDate; import java.util.ArrayList; public class PersonneC { private String nom; private String prenom; private LocalDate date_nais; private ArrayList<ArticleC> oeuvresList; public PersonneC() { super(); oeuvresList=new ArrayList<> (); } public PersonneC(String n,String p,LocalDate d) { this.nom=n; this.prenom=p; this.date_nais=d; } public PersonneC(String n,String p,LocalDate d,int ref,String des) //ajoute ref et des dans liste des oeuvres { this.nom=n; this.prenom=p; this.date_nais=d; ArticleC oeuvre; oeuvre=new ArticleC(); oeuvre.setReference(ref); oeuvre.setDesignation(des); oeuvresList=new ArrayList<>(); oeuvresList.add(oeuvre); } public ArrayList<ArticleC> getoeuvresList() { return oeuvresList; } public String getNom() { return nom; } public void setNom(String nom) { this.nom = nom; } public String getPrenom() { return prenom; } public void setPrenom(String prenom) { this.prenom = prenom; } public LocalDate getDate_nais() { return date_nais; } public void setDate_nais(LocalDate date_nais) { this.date_nais = date_nais; } public String toString() { return prenom + " Classe PersonneC " + nom + " " + date_nais; } }
Et en résultat :
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 public static void main(String[] args) { ArticleC a; LivreC3 l,l1; DvdC3 d; PersonneC p; l1=new LivreC3(); l1.setReference(123); l1.setDesignation("Le Pigeon"); l1.setPrix(20.54); l1.setIsbn("1245879215"); l1.setNbPages(254); l1.setAuteur(p=new PersonneC("Zone1","Eric1",LocalDate.of(1980, 12,11),l1.getReference(),l1.getDesignation())); System.out.println("il y a " + p.getoeuvresList().size() + " articles(s) dans la liste"); System.out.println("il y a " + p.getoeuvresList() + " articles(s) dans la liste");
il y a 2 articles(s) dans la liste
il y a [Référence : 123 Désignation : Le Pigeon Prix : 0.0 €, Référence : 123 Désignation : Le Pigeon Prix : 20.54 € Nbre Pages : 254 Auteur : Eric1 Classe PersonneC Zone1 1980-12-11] articles(s) dans la liste
Et là ce trouve le problème il me compte 2 articles alors que j'en ai créé qu'un.
Je pense que le problème vient de :
qui utilise ce constructeur de Personne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 l1.setAuteur(p=new PersonneC("Zone1","Eric1",LocalDate.of(1980, 12,11),l1.getReference(),l1.getDesignation()));
qui ajoute dans "oeuvresList" statique "oeuvre"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public PersonneC(String n,String p,LocalDate d,int ref,String des) //ajoute ref et des dans liste des oeuvres { this.nom=n; this.prenom=p; this.date_nais=d; ArticleC oeuvre; oeuvre=new ArticleC(); oeuvre.setReference(ref); oeuvre.setDesignation(des); oeuvresList=new ArrayList<>(); oeuvresList.add(oeuvre); }
puis la méthode setAuteur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ArticleC oeuvre; oeuvre=new ArticleC(); oeuvre.setReference(ref); oeuvre.setDesignation(des); oeuvresList=new ArrayList<>(); oeuvresList.add(oeuvre);
rajoute elle aussi dans la liste lst variable locale auteur de type Personne, c'est pour ca que le compte est à 2.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public void setAuteur(PersonneC auteur) { this.auteur = auteur; ArrayList<ArticleC> lst; // lst=new ArrayList<> (); lst=auteur.getoeuvresList(); if (!lst.contains(this)) { lst.add(this); } }
Petite modif à mon message je viens de voir que si je rajoute pas à la liste classique le résultat est bon :
mais si je rajpute un autre livre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public PersonneC(String n,String p,LocalDate d,int ref,String des) //ajoute ref et des dans liste des oeuvres { this.nom=n; this.prenom=p; this.date_nais=d; ArticleC oeuvre; oeuvre=new ArticleC(); oeuvre.setReference(ref); oeuvre.setDesignation(des); oeuvresList=new ArrayList<>(); // oeuvresList.add(oeuvre); */ ici ligne en commentaire je ne rajoute pas à l a liste statique }
Le résultat est eronné soit tjrs un article :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 l1=new LivreC3(); l1.setReference(124); System.out.println("ref = " + l1.getReference()); l1.setDesignation("Le Pigeon Voyageur"); l1.setPrix(28.54); l1.setIsbn("1245879217"); l1.setNbPages(275); l1.setAuteur(p=new PersonneC("Zone2","Eric2",LocalDate.of(1980, 12,11),l1.getReference(),l1.getDesignation())); System.out.println("il y a (2ème Livre)" + p.getoeuvresList() + " articles(s) dans la liste"); System.out.println("il y a (2ème Livre) " + p.getoeuvresList().size() + " articles(s) dans la liste");
il y a 1 articles(s) dans la liste
il y a [Référence : 123 Désignation : Le Pigeon Prix : 20.54 € Nbre Pages : 254 Auteur : Eric1 Classe PersonneC Zone1 1980-12-11] articles(s) dans la liste
ref = 124
il y a (2ème Livre)[Référence : 124 Désignation : Le Pigeon Voyageur Prix : 28.54 € Nbre Pages : 275 Auteur : Eric2 Classe PersonneC Zone2 1980-12-11] articles(s) dans la liste
il y a (2ème Livre) 1 articles(s) dans la liste
Voilà j'espère avoir été assez clair si quelqu'un pouvait m'aider MERCI
Partager