import
java.util.Scanner;
import
java.util.Stack;
class PostfixEvaluator {
private final char ADD = '+';
private final char SUBTRACT = '-';
private final char MULTIPLY = '*';
private final char DIVIDE = '/';
private Stack<Integer> stack;
public PostfixEvaluator(){
stack = new Stack<Integer>();
}
public int evaluate(String expr){
int op1,op2,result=0;
String token;
String[] tokenizer = expr.split("\\s");
for (int x = 0; x < tokenizer.length; x++){
System.out.print(tokenizer[x]+" ");
token = tokenizer[x];
if(isOperator(token)){
op2 = (stack.pop()).intValue();
op1 = (stack.pop()).intValue();
result = evalSingleOp
(token.charAt(0),op1,op2);
}else {
stack.push(new Integer(Integer.parseInt(token)));
}
}
return result;
}
private int evalSingleOp(char operation, int op1, int op2) {
int result = 0;
switch(operation)
{
case ADD:
result = op1+op2;
break;
case SUBTRACT:
result = op1-op2;
break;
case MULTIPLY:
result = op1*op2;
break;
case DIVIDE:
result = op1/op2;
break;
}
return result;
}
private boolean isOperator(String token) {
return (token.equals("+")||token.equals("-")||
token.equals("*")||token.equals("/"));
}
}
public class Postfix {
public static void main(String[] args) {
String expression, again;
int result;
try {
Scanner in = new Scanner(System.in);
do {
PostfixEvaluator evaluator = new PostfixEvaluator();
System.out.println("Please enter a postfix
expression:");
expression = in.nextLine();
result =
evaluator.evaluate(expression);//
System.out.println();
System.out.println("The result evaluation:" + result);
System.out.println("evalue the other expression【Y/N】?:");
again = in.nextLine();
if (again.equalsIgnoreCase("n")) {
System.out.println("Exit");
}
System.out.println();
} while (again.equalsIgnoreCase("y"));
} catch (Exception e) {
e.printStackTrace();
System.out
.println("Input exception,Please enter
a correct expressiom.");
}
}
}