# Stack: Evaluate a postfix expression

Question: Evaluate a postfix expression

```package additional_problems.stack;

/**
* Note that every number must have spaces between them
* 1. Start from the first element of the post fix expression
* 2. If operand encountered, then push onto stack
* 3. If operator encountered, pop the top two elements and evaluate operator2- operator1
* 4. Push result onto stack
* Created by aarushi on 7/7/21.
*/
public class P06EvaluationOfPostfixMoreThanOneDigit {

public static double evaluate(char operator, double operand2, double operand1){
switch (operator){
case '+':
return operand1+operand2;
case '-':
return operand1-operand2;
case '*':
return operand1*operand2;
case '/':
return operand1/operand2;
case '%':
return operand1%operand2;
case '^':
return Math.pow(operand1, operand2);
default:
return 0;
}
}

public static double evaluatePostfix(String postfixExpression){
DoubleStack stack = new DoubleStack(postfixExpression.length());
StringBuffer num= new StringBuffer();

//1. Start from the first element of the post fix expression
for(int i=0; i<postfixExpression.length(); i++){
char c= postfixExpression.charAt(i);

// if space is encountered then the number is complete
if(c==' '){
if(num.length()>0) {
stack.push(Double.parseDouble(num.toString()));
num = new StringBuffer("");
}
}

//2. If operand occurred then append to num
else if (c >= '0' && c <= '9') {
num.append(c);
}

//3. If operator occurred then pop top two elements from stack and evaluate expression
//4. Push result onto stack
else if (c=='+' || c=='-' || c=='*' || c=='/' || c=='%' | c=='^'){
stack.push(evaluate(c, stack.pop(), stack.pop()));
}
}