大家好我在这里有一个中缀到postfix转换器。 正在转换
4 - 9 * 11 + 155 * ( 21 - 17 )/ 3
到
4 9 11 155 21 17 3 - * + * -
所以非常接近。这是正确的 表达更短。有什么想法吗?
public class ExpressionTools {
static MyStack<String> operatorStack=new MyStack<String>();
public static String infixToPostfix(String infix)throws Exception{
Scanner tokenizer = new Scanner (infix);
System.out.println("hi");
String postFixExpression="";
while (tokenizer.hasNext()){
String temp=tokenizer.next();
if(temp.charAt(0)>=48&&temp.charAt(0)<=57){
for(int i=0; i<temp.length(); i++){
if(!Character.isDigit(temp.charAt(i))){
throw new PostFixException("Invalid expression"+temp);
}
}
postFixExpression+=temp+" ";
}
else if(temp.equals('(')){
operatorStack.push(temp);
}
else if(temp.equals("*")||temp.equals("+")||temp.equals("-")||temp.equals("/")){
if(!operatorStack.isEmpty()){
while(operatorStack.isEmpty()&&operatorStack.peek().equals("*")||operatorStack.isEmpty()&&operatorStack.peek().equals("/")){
postFixExpression+=operatorStack.pop()+" ";
}
}
operatorStack.push(temp);
}
else if(temp.equals(")")){
while(!operatorStack.isEmpty()){
if(!operatorStack.peek().equals("(")){
postFixExpression+=operatorStack.pop()+" ";
}
else{
operatorStack.pop();
break;
}
}
}
System.out.println(postFixExpression);
}
while(!operatorStack.isEmpty()){
postFixExpression+=operatorStack.pop()+" ";
}
System.out.println("final postfix");
System.out.println(postFixExpression);
return postFixExpression;
}
答案 0 :(得分:0)
这里有几个问题。
operatorStack.isEmpty()&&operatorStack.peek().equals("*")
永远不会成真。
operatorStack.isEmpty()&&operatorStack.peek().equals("/")
永远不会成真。
else if(temp.equals('(')){
应为else if(temp.equals("(")){
。
您的标记生成器不会将)
与/
分开。您需要在)
之后添加空格,或者使用更好的标记器。