Le 11/04/2012 17:10, Eric Chatellier a écrit :
Le 11/04/2012 17:03, Loic GASCHE a écrit :
Bonjour,
J'ai rajouté un petit bout de code à notre script de calcul de F dans SiMatrix pour que le calcul de F se fasse bien uniquement sur les F jugés "représentatifs" par le CIEM et pas les autres :
if (pop.getName() == "Sole7D"){ List<PopulationGroup> groups3a8 = groups.subList(3, 9); List<PopulationGroup> groupesRepresentatifs = new ArrayList(groups3a8); log.info("groupesRepresentatifs = " + groupesRepresentatifs + "Year=" + step.getYear()); } else if (pop.getName() == "Plaice7D"){ List<PopulationGroup> groups3a6 = groups.subList(3, 7); List<PopulationGroup> groupesRepresentatifs = new ArrayList(groups3a6); log.info("groupesRepresentatifs = " + groupesRepresentatifs + "Year=" + step.getYear()); }
Le but est de créer une liste de groupes par pop qui contienne uniquement les groupes représentatifs, afin par la suite de boucler sur ces groupes uniquement.
Déjà j'ai quelques doutes sur les conditions dans mes "if", mais il n'y a que comme ça que j'ai réussi à avoir un code qui se compile. Par exemple je doute sur l'utilité du "pop.getName()" alors que "pop" tout seul sort déjà Sole7D ou Plaice7D... Mais alors il faut peut-être modifier la manière d'écrire la condition ? C'est ca, mais plutôt : if (pop.getName().equals("Sole7D")) {
Sans les conditions, les subList me sortent bien une liste contenant uniquement les groupes que je souhaite conserver.
Mais malgré tout quand je demande de boucler sur "groupesRepresentatifs" au lieu de "groups" (tous les groupes) : for (PopulationGroup group : groupesRepresentatifs) {
j'ai le message d'erreur suivant qui me dit que groupesRepresentatifs n'existe pas :
C:\Users\lgasche\isis-fish-4\isis-database\scripts\SiMatrix.java:1637: cannot find symbol symbol : variable groupesRepresentatifs location: class scripts.SiMatrix for (PopulationGroup group : groupesRepresentatifs) { //groupesRepresentatifs ^
Voilà, je ne vois pas trop d'où vient le soucis... Help ? Tu as du mettre ta boucle for apres le if ? Si c'est le cas, List<PopulationGroup> groupesRepresentatifs n'existe que dans le block qui le déclare.
Il faut sortir l'instance de la liste: List<PopulationGroup> groupesRepresentatifs; if () { groupesRepresentatifs = ... } else { groupesRepresentatifs = ... }
pour qu'elle continue d'exister après le if
Heu... Alors si je fais : List<PopulationGroup> groupesRepresentatifs = new ArrayList(); if (pop.getName().equals("Sole7D")){ List<PopulationGroup> groups3a8 = groups.subList(3, 9); groupesRepresentatifs = groups3a8; } else if (pop.getName().equals("Plaice7D")){ List<PopulationGroup> groups3a6 = groups.subList(3, 7); groupesRepresentatifs = groups3a6; } Ca compile, ça tourne, et j'ai des résultats cohérents avec ce que j'attendais... Mais si je demande les logs de "groupesRepresentatifs" je n'ai pas du tout ma liste de groupes, mais des trucs du genre : groupesRepresentatifs = org.hibernate.collection.AbstractPersistentCollection$ListProxy@169068d, alors que ça marchait tout à l'heure quand je n'avais pas de "if"... Bizarre. Et si je fais : List<PopulationGroup> groupesRepresentatifs; if (pop.getName().equals("Sole7D")){ List<PopulationGroup> groups3a8 = groups.subList(3, 9); log.info("groups3a8 = " + groups3a8 + "Year=" + step.getYear()); groupesRepresentatifs = new ArrayList(groups3a8); log.info("groupesRepresentatifs = " + groupesRepresentatifs + "Year=" + step.getYear()); } else if (pop.getName().equals("Plaice7D")){ List<PopulationGroup> groups3a6 = groups.subList(3, 7); log.info("groups3a6 = " + groups3a6 + "Year=" + step.getYear()); groupesRepresentatifs = new ArrayList(groups3a6); log.info("groupesRepresentatifs = " + groupesRepresentatifs + "Year=" + step.getYear()); } , ça ne compile pas et ça me met l'erreur : C:\Users\lgasche\isis-fish-4\isis-database\scripts\SiMatrix.java:1640: variable groupesRepresentatifs might not have been initialized for (PopulationGroup group : groupesRepresentatifs) { Voilà... Je cherche encore la boulette.