Bonjour,
Je débute en Java, et j’ai un petit souci de référence je pense. Pour illustrer mon problème : j’ai une base de données contenant la liste des tests (médicaux) effectués par plusieurs personnes. Une ligne (un n-uplet représente un test précis (par exemple : la vue), donc une personne est présente sur plusieurs lignes. Mais un attribut de cette table contient le code de la personne (CodePers), et qui peut être identique également sur plusieurs lignes.
J’ai créé une classe ListeTest qui extrait les données de la base -> OK sans problème, je peux les afficher même.
Mon problème vient de la création de la classe ListePersonne qui contient une ArrayList de classe Personne. Sachant qu’une classe personne a comme attribut une ListeTest.
Cette classe prend en paramètre une instance de la classe ListeTest.
Ce que je fais donc c’est que je parcours la ListeTest, et je crée une ListeTest temporaire.
Je procède comme suit :
Je prends le premier CodePers
Tant que CodePers est identique au CodePers suivant alors j’ajoute le Test courant de la ListeTest dans Personne.
Dès qu’on change de CodePers, on ajoute Personne dans la ListePersonne.
Pour bien verifier, j’affiche à chaque fois que je change de personne, et tout est correct.
Par contre si je veux afficher chaque personne à partir de la ListePersonne, il n’affiche rien. La liste contient bien le nombre de personne introduite mais pas les valeurs.
En code(désolé si les indentations ne sont pas très propres
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 public class ListePersonne { //l'attribut protected ArrayList<Personne> pers_list; public ListePersonne(ListeTest lt){ try { pers_list = new ArrayList<Personne>(); Personne p = new Personne(); for (int j=1;j<(lt.taille());j++){ String tmp = lt.getListeTest().get(j-1).getCodePers(); if (tmp.equals(lt.getListeTest().get(j).getCodePers())){ p.ajouter(lt.getListeTest().get(j-1)); } else { p.ajouter(lt.getListeTest().get(j-1)); //p.afficher(); pers_list.add(p); p.vider(); } if(j==(lt.taille()-1)){ String tmp2 = lt.getListeTest().get(j).getCodePers(); if(tmp2.equals(lt.getListeTest().get(j-1).getCodePers())){ p.ajouter(lt.getListeTest().get(j)); //p.afficher(); pers_list.add(p); p.vider(); } else { p.ajouter(lt.getListeTest().get(j-1)); //p.afficher(); pers_list.add(p); p.vider(); p.ajouter(lt.getListeTest().get(j)); pers_list.add(p); p.vider(); } } System.out.println("Liste personne créée"); } catch (Exception ex) { System.out.println("Erreur :"+ex); } } public void afficher(){ System.out.println("nb personne: "+pers_list.size()); for (int i=0; i<pers_list.size(); i++) pers_list.get(i).afficher(); } } })
Là le souci c’est qu’au final dans la classe, l’attribut pers_liste n’a aucune valeur. C’est comme si c’est une variable locale qui est périmée et donc sa référence n’a plus de valeur.
Quand je fais un affichage de la ListePersonne… Niet, rien. Pourtant, les affichage (en commentaire dans le code) type p.afficher(), ça fonctionne bien.
Comment on fait pour que les valeurs restent, sachant qu’en java, de mémoire, il n’y a pas de constructeurs par recopie.
Merci d’avance pour votre aide.
Partager