cannot find symbol
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 ? 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 ? Loïc
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 -- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
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.
Le 11/04/2012 18:03, Loic GASCHE a écrit :
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.
Ce message bizar, c'est purement technique mais ce n'est pas une erreur en soit. C'est la différence entre : groupesRepresentatifs = new ArrayList(groups3a8); et groupesRepresentatifs = groups3a8 Le 2eme n'est pas directement affichable.
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) {
Il manque = null dans List<PopulationGroup> groupesRepresentatifs = null; if () { ... -- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
Le 11/04/2012 18:09, Eric Chatellier a écrit :
Le 11/04/2012 18:03, Loic GASCHE a écrit :
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.
Ce message bizar, c'est purement technique mais ce n'est pas une erreur en soit. C'est la différence entre : groupesRepresentatifs = new ArrayList(groups3a8); et groupesRepresentatifs = groups3a8
Le 2eme n'est pas directement affichable.
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) {
Il manque = null dans
List<PopulationGroup> groupesRepresentatifs = null;
if () { ...
Ah oui en effet avec le "= null" ça marche et les logs sont bons. Merci !
participants (2)
-
Eric Chatellier -
Loic GASCHE