problème de list en variable de class
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 static
Code:
this.listeProgTunnel12 = Besoin.getList12ByBesoin(this.listeNouveauBesoin);
avec la variable de class listNouveauBesoin en paramètre.
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:
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);
} |
Code:
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;
}
} |
La console me renvoie
Citation:
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