Bonjour, désolé de vous embêter avec mes problèmes mais je sèche dessus depuis un moment et ma dead line se rapproche ^^
J'ai deux class:
-Analyse
-Besoin
Le constructeur Analyse() appelle la méthode staticavec la variable de class listNouveauBesoin en paramètre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part this.listeProgTunnel12 = Besoin.getList12ByBesoin(this.listeNouveauBesoin);
Le problème c'est que au retour de listeProgTunnel12, la variable de class listeNouveauBesoin est égale à la variable locale listeNouveauBesoin de la méthode getList12ByBesoin.
En gros je ne veux pas que la manipulation de la variable listeNouveauBesoin dans la fonction impacte la variable de class d'Analyse.
Si vous avez une idée merci ;-)
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 package fr.cnam.papplication; import java.util.List; import fr.cnam.particle.Article; import fr.cnam.pdal.ArticleDao; import fr.cnam.pdal.FabriqueDao; /** * @author Pierre * */ public class Analyse { /** *1-Augmentation du besoin avec l'heure * 1.1-Le besoin n'existe pas * 1.1.1-Création Liste de besoin de base pour 30 min * 1.2-Le besoin existe déjà * 1.2.1-Ajout d'une min d'augmentation de coefficient *2-comparaison des deux listes d'articles * 1.1-Pas de changement dans la liste * 1.2-Il y a des changements dans la liste * 1.1.1-Un ou plusieurs articles a été ajouté * 1.1.2-Un ou plusieurs articles on été supprimés * 1.1.3-Les deux * 3-Calcul du nouveau besoin par article * 4-Calcul de la programmation * 5-On efface les anciennes listes et on les remplace * 6-Enregistrement de liste1 dans le fichier qui devient liste2 * */ private List<Besoin>listeAncienBesoin; private List<Besoin>listeNouveauBesoin; private List<Article>listeAncienTunnel12; private List<Article>listeAncienTunnel14; private List<Article>listeProgTunnel12; private List<Article>listeProgTunnel14; //************************************Constructeur****************************************** public Analyse(){ this.listeAncienBesoin= ancienBesoin(); this.listeNouveauBesoin = analyseDeTunnel(); System.out.println("listeNouveauBesoin : dans analyse (avant Besoin.getList12ByBesoin)"); for (Besoin b : listeNouveauBesoin) {//Je teste la liste System.out.println(b); } this.listeProgTunnel12 = Besoin.getList12ByBesoin(this.listeNouveauBesoin); System.out.println("listeNouveauBesoin : dans analyse (après Besoin.getList12ByBesoin)"); for (Besoin b : listeNouveauBesoin) {//Je reteste la liste, et là surprise elle est différente. System.out.println(b); } this.listeProgTunnel14 = Besoin.getList14ByBesoin(this.listeNouveauBesoin); }
La console me renvoie
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155 package fr.cnam.papplication; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; import fr.cnam.particle.Article; import fr.cnam.particle.TCategorie; /** * @author Pierre * */ public class Besoin{ private Article article; private double besoinActuel; public Besoin(){ this.article = null; this.besoinActuel = 0; } public Article getArticle() { return article; } public void setArticle(Article article) { this.article = article; } public double getBesoinActuel() { return besoinActuel; } public void setBesoinActuel(double besoinActuel) { this.besoinActuel += besoinActuel; if (this.besoinActuel<0) { this.besoinActuel=0; } } protected static List<Besoin> besoinParDefault(){ //Besoin par article pour 30 min List<Besoin>listeAncienBesoin = new ArrayList<Besoin>(); String string = new String(); try { for (TCategorie cat : TCategorie.values()) { string = "fr.cnam.particle."+cat; Object o = Class.forName(string).newInstance(); Article a = (Article) o; Besoin b = new Besoin(); b.setArticle(a); //Je ne charge le besoin que pour 5 min au démarrage car entre le lancement du programme et le démarrage des tunnels 25 min vont s'écouler b.setBesoinActuel(a.getBesoinParMin()*5); listeAncienBesoin.add(b); System.out.println("besoin par default + "+a+" besoin actuel "+b.getBesoinActuel()); } } catch (Exception e) { e.printStackTrace(); } return listeAncienBesoin; } public static List<Article> getList12ByBesoin(List<Besoin> listeNouveauBesoin){ List<Article>listeProgTunnel12 = new ArrayList<Article>(); int p,j; //Ecarte les articles marginaux qui vont sur la voie 13 // ArrayList<String> ar = new ArrayList<String>(); // for (ListIterator<Besoin> i = listeAncienBesoin.listIterator(); i.hasNext(); i.next()) { // i.add("hello"); ListIterator<Besoin> i = listeNouveauBesoin.listIterator(); System.out.println("GetList12ByBesoin :"); while (i.hasNext()) { Besoin b = i.next(); Article a = b.getArticle(); TCategorie cat = a.getCategorie(); System.out.println(b.getArticle()+" besoin actuel "+b.getBesoinActuel()); if((cat==TCategorie.FiletFragile)||(cat==TCategorie.LaineDelicat)||(cat==TCategorie.SacsSlingArticle)) { i.remove(); } //pour le tunnel 12 //On va supprimer les besoins de la liste du tunnel 14 (concerne moins d'articles) if((cat==TCategorie.Drap)||(cat==TCategorie.DrapHousse)||(cat==TCategorie.Alese)||(cat==TCategorie.Eponge)||(cat==TCategorie.Couverture)) { i.remove(); } } while (listeProgTunnel12.size()<10) {// Relance la boucle jusqu'à ce que la liste soit de 10 articles for (Besoin b1: listeNouveauBesoin) { // va tester tous les besoins de la liste j=1; if(listeProgTunnel12.size()>=10) //Maintient la liste à 10 meme si tout les Besoin n'ont pas été testé dans la boucles(On a les 10 plus grands) break; for (Besoin b2 : listeNouveauBesoin) {//Compare tous les besoin entre eux if(b1.getBesoinActuel()<b2.getBesoinActuel()) { break;//Ce n'est pas le plus grand besoin restant donc on va chercher un nouveau besoin }else if(j==listeNouveauBesoin.size()){// Toute la liste a été testé et le besoin b est le plus grand besoin restant p = listeNouveauBesoin.indexOf(b1); listeProgTunnel12.add(b1.getArticle());// On ajoute l'article à la liste de programmation b1.setBesoinActuel(-1); //On modifie le besoin de l'article //On ne modifie pas la valeur de class de la liste nouveaubesoin. Celle ci se modifie uniquement avec l'action lavage listeNouveauBesoin.set(p, b1);// On réinscrit la modification dans la liste }else {// On passe à la comparaison suivante j++; } } } } System.out.println("list de la variable locale listeNouveauBesoin :"); for (Besoin b1: listeNouveauBesoin) { System.out.println(b1); } return listeProgTunnel12; } public static List<Article> getList14ByBesoin(List<Besoin> listeNouveauBesoin){ int p; List<Besoin>listeBesoinT14 = new ArrayList<Besoin>(); List<Article>listeProgTunnel14 = new ArrayList<Article>(); ListIterator<Besoin> i = listeNouveauBesoin.listIterator(); System.out.println("GetList14ByBesoin :"); while (i.hasNext()) { Besoin b = i.next(); Article a = b.getArticle(); TCategorie cat = a.getCategorie(); System.out.println("Article dans besoin + "+b.getArticle()+" besoin actuel "+b.getBesoinActuel()); //On récupère uniquement les articles qui vont sur la voie 14 if((cat==TCategorie.Drap)||(cat==TCategorie.DrapHousse)||(cat==TCategorie.Alese)||(cat==TCategorie.Eponge)||(cat==TCategorie.Couverture)) { listeBesoinT14.add(b); } } //Pour le tunnel14 //On récupère les articles du tunnel 14 while (listeProgTunnel14.size()<10) {// Relance la boucle jusqu'à ce que la liste soit de 10 articles for (Besoin b1: listeBesoinT14) { // va tester tous les besoins de la liste int j=1; for (Besoin b2 : listeBesoinT14) {//Compare tous les besoin entre eux if(b1.getBesoinActuel()>b2.getBesoinActuel()) { break;//Ce n'est pas le plus grand besoin restant donc on va chercher un nouveau besoin }else if(j==listeBesoinT14.size()){// Toute la liste a été testé et le besoin b est le plus grand besoin restant p = listeBesoinT14.indexOf(b1); listeProgTunnel14.add(b1.getArticle());// On ajoute l'article à la liste de programmation b1.setBesoinActuel(-1); //On modifie le besoin de l'article //On ne modifie pas la valeur de class du besoin. Celle ci se modifie uniquement avec l'action lavage listeBesoinT14.set(p, b1);// On réinscrit la modification dans la liste }else {// On passe à la comparaison suivante j++; } } } } return listeProgTunnel14; } }
listeNouveauBesoin : dans analyse (avant Besoin.getList12ByBesoin)
fr.cnam.papplication.Besoin@25a6944c
fr.cnam.papplication.Besoin@5e1fa5b1
fr.cnam.papplication.Besoin@6b00f608
fr.cnam.papplication.Besoin@2f17e30d
fr.cnam.papplication.Besoin@3e821657
fr.cnam.papplication.Besoin@1d131e1b
fr.cnam.papplication.Besoin@71cf1b07
fr.cnam.papplication.Besoin@615091b8
fr.cnam.papplication.Besoin@4fce136b
fr.cnam.papplication.Besoin@4aa83f4f
fr.cnam.papplication.Besoin@43b6123e
fr.cnam.papplication.Besoin@260e86a1
fr.cnam.papplication.Besoin@19648c40
fr.cnam.papplication.Besoin@12bd8a64
fr.cnam.papplication.Besoin@61e94def
fr.cnam.papplication.Besoin@3300f4fd
fr.cnam.papplication.Besoin@ebb6851
fr.cnam.papplication.Besoin@70ab2d48
fr.cnam.papplication.Besoin@5b068087
GetList12ByBesoin :
fr.cnam.particle.Alese@fc258b1 besoin actuel 0.06666667014360428
fr.cnam.particle.Blouse@6ff65192 besoin actuel 0.46666666865348816
fr.cnam.particle.Casaque@2dd80673 besoin actuel 0.03333333507180214
fr.cnam.particle.Chemise@4af0df05 besoin actuel 0.23333333432674408
fr.cnam.particle.Chiffonette@57ea113a besoin actuel 0.12222222238779068
fr.cnam.particle.Contamine@acdb094 besoin actuel 0.17777778208255768
fr.cnam.particle.Couverture@674bd420 besoin actuel 0.42222219705581665
fr.cnam.particle.DessusLit@2b0f373b besoin actuel 0.03333333507180214
fr.cnam.particle.DrapHousse@2ceb80a1 besoin actuel 0.1666666716337204
fr.cnam.particle.Drap@4b45dcb8 besoin actuel 1.4333332777023315
fr.cnam.particle.Eponge@7216fb24 besoin actuel 0.42222219705581665
fr.cnam.particle.FiletFragile@2072acb2 besoin actuel 0.0
fr.cnam.particle.FrangeMenage@50ecde95 besoin actuel 0.2888888716697693
fr.cnam.particle.LaineDelicat@35a9782c besoin actuel 0.0
fr.cnam.particle.Menu@70a36a66 besoin actuel 0.2888888716697693
fr.cnam.particle.Sac@45815ffc besoin actuel 0.25555554032325745
fr.cnam.particle.Technique@732f29af besoin actuel 0.0
fr.cnam.particle.TenueBloc@d3957fe besoin actuel 0.24444444477558136
fr.cnam.particle.SacsSlingArticle@6622fc65 besoin actuel 0.0
list de la variable locale listeNouveauBesoin :
fr.cnam.papplication.Besoin@5e1fa5b1
fr.cnam.papplication.Besoin@6b00f608
fr.cnam.papplication.Besoin@2f17e30d
fr.cnam.papplication.Besoin@3e821657
fr.cnam.papplication.Besoin@1d131e1b
fr.cnam.papplication.Besoin@615091b8
fr.cnam.papplication.Besoin@19648c40
fr.cnam.papplication.Besoin@61e94def
fr.cnam.papplication.Besoin@3300f4fd
fr.cnam.papplication.Besoin@ebb6851
fr.cnam.papplication.Besoin@70ab2d48
listeNouveauBesoin : dans analyse (après Besoin.getList12ByBesoin)
fr.cnam.papplication.Besoin@5e1fa5b1
fr.cnam.papplication.Besoin@6b00f608
fr.cnam.papplication.Besoin@2f17e30d
fr.cnam.papplication.Besoin@3e821657
fr.cnam.papplication.Besoin@1d131e1b
fr.cnam.papplication.Besoin@615091b8
fr.cnam.papplication.Besoin@19648c40
fr.cnam.papplication.Besoin@61e94def
fr.cnam.papplication.Besoin@3300f4fd
fr.cnam.papplication.Besoin@ebb6851
fr.cnam.papplication.Besoin@70ab2d48
GetList14ByBesoin :
Article dans besoin + fr.cnam.particle.Blouse@6ff65192 besoin actuel 0.0
Article dans besoin + fr.cnam.particle.Casaque@2dd80673 besoin actuel 0.0
Article dans besoin + fr.cnam.particle.Chemise@4af0df05 besoin actuel 0.0
Article dans besoin + fr.cnam.particle.Chiffonette@57ea113a besoin actuel 0.0
Article dans besoin + fr.cnam.particle.Contamine@acdb094 besoin actuel 0.0
Article dans besoin + fr.cnam.particle.DessusLit@2b0f373b besoin actuel 0.0
Article dans besoin + fr.cnam.particle.FrangeMenage@50ecde95 besoin actuel 0.0
Article dans besoin + fr.cnam.particle.Menu@70a36a66 besoin actuel 0.0
Article dans besoin + fr.cnam.particle.Sac@45815ffc besoin actuel 0.0
Article dans besoin + fr.cnam.particle.Technique@732f29af besoin actuel 0.0
Article dans besoin + fr.cnam.particle.TenueBloc@d3957fe besoin actuel 0.0
Partager