привет всем, у меня есть инфикс для постфиксного конвертера здесь. Это преобразованиеinfix to postifx converter
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;
}
Вы прошли через этот код в своем отладчике? –