Merci de ta réponse. Ce que tu m'as proposé est ce que j'avais essayé en premier, me paraissant le plus logique. Malheureusement, cela me renvoie une NullPointerException. Si je ne me trompe pas, dans la question 1, les seuls changements à faire sont dans VisiteurEvaluation, VisiteurInfixe et Postfixe. J'ai réouvert le projet en partant de 0, utilisé ta solution exact, et j'ai toujours le NullPointerException.
Dans le préliminaire, dans la classe Variable, la méthode lire() est utilisée:
Code : Tout sélectionner
public int interprete(Contexte c) {
return c.lire(this.nom);
}
A la création d'une Variable, celle-ci est écrite dans la HashMap de Memoire avec ecrire(), il ne faudrait pas donc appeler la méthode lire() pour aller la chercher à un moment ? Avec la solution que tu m'as donnée,
n'est utilisé nul part dans le code, ça fonctionne bien pour toi ?
C'est aussi la solution que je vois dans le cours, mais j'ai toujours la même exception.
Code : Tout sélectionner
public Integer visite(Soustraction s) {
return s.op1().accepter(this) - s.op2().accepter(this);
}
public Integer visite(Addition a) {
return a.op1().accepter(this) + a.op2().accepter(this);
}
Je lance testSoustraction et j'ai un NullPointer. Autre exemple:
Code : Tout sélectionner
public static void main(String[] args) {
Memoire m = new Memoire();
Variable i = new Variable(m,"i",3);
Variable j = new Variable(m,"j",5);
VisiteurExpression<Integer> ve = new VisiteurEvaluation( m);
VisiteurExpression<String> vi = new VisiteurInfixe( m);
VisiteurExpression<String> vp = new VisiteurPostfixe( m);
System.out.println(new Soustraction(new Addition(i, j), new Constante(5)).accepter(ve).intValue());
// System.out.println(new Addition(new Addition(i, j), new Constante(5)).accepter(vi).intValue());
Me donne, lorsque j'utilise VisiteurEvaluation
Code : Tout sélectionner
java.lang.NullPointerException
at question1.VisiteurEvaluation.visite(VisiteurEvaluation.java:16)
at question1.VisiteurEvaluation.visite(VisiteurEvaluation.java:3)
at question1.Addition.accepter(Addition.java:10)
at question1.VisiteurEvaluation.visite(VisiteurEvaluation.java:12)
at question1.VisiteurEvaluation.visite(VisiteurEvaluation.java:3)
at question1.Soustraction.accepter(Soustraction.java:10)
at question1.VisiteurEvaluation.main(VisiteurEvaluation.java:33)
Mais, lorsque j'utilise VisiteurInfixe (non touchée), ca me donne:
Honnêtement je suis complètement perdu.