J'ai récemment écrit un programme Java qui prend une expression infixe et la convertit en une expression postfixée. Cela fonctionne pour la plupart mais je reçois des sorties fausses pour certaines expressions. Par exemple, l'expression a + b + c + d + e sortira abcde +++++ quand il devrait sortir a b + c + d + e +.Obtenir des sorties erronées dans l'application infix à postfix avec Java
import java.util.Stack;
public class ITP {
public static Stack<Character> stack;
public static String inFixExp;
public static String postFixExp = "";
public static String infixToPostfix(String exp){
ITP o = new ITP();
stack = new Stack<Character>();
inFixExp = exp;
for (int i = 0; i < inFixExp.length(); i++) {
if (inFixExp.charAt(i) == '(')
stack.push(inFixExp.charAt(i));
else if (inFixExp.charAt(i)==')'){
while (stack.peek()!='('){
postFixExp += stack.pop();
}
stack.pop();
}else if ((inFixExp.charAt(i)=='*')||(inFixExp.charAt(i)=='/')||(inFixExp.charAt(i)=='+')||(inFixExp.charAt(i)=='-')){
while(!stack.isEmpty() && o.getPredence(inFixExp.charAt(i)) < o.getPredence(stack.peek()))
postFixExp += stack.pop();
stack.push(inFixExp.charAt(i));
}else
postFixExp += inFixExp.charAt(i);
}
while(!stack.isEmpty())
postFixExp += stack.pop();
return postFixExp;
}
public int getPredence(Object op) {
if((op.equals("*")) || (op.equals("/")))
return 3;
else if((op.equals("+"))||(op.equals("-")))
return 1;
else
return 0;
}
}
Je trouve que si je change la < avec < = dans la ligne 24, il va corriger ce problème mais je vais obtenir une erreur de pile vide et d'autres expressions affichera de manière incorrecte, comme a + b * c qui va sortir ab + c *, quand il est censé être abc * +.
Merci! ceci l'a réparé parfaitement – Thomas
De rien. Personnellement, j'essaie de ne pas utiliser Object dans les signatures de méthode car le super type Object risque de faire perdre à l'utilisateur la trace de sa frappe. Bien que, dans ce cas, ce n'est pas très pertinent. –