首页 > 代码库 > 后缀表达式的计算

后缀表达式的计算

/**
 * 后缀表达式的计算
 * 
 * 使用栈来保存结果
 * 
 * 1.从左向右逐一检查后缀表达式中的每一个字符
 * 2.遇到数字直接push入栈
 * 3.遇到操作符,就从栈中弹出两个数参与运算,将结果保留在栈中,如果操作符是 /,-或者^
 * 号,则后弹出的数是第一个运算数
 * 4.最后的结果保留在栈中**/
import java.util.Stack;

public class calc {
	public double calculate(String postfix){
		Stack<Double> sk=new Stack<Double>();
		char[] ch=postfix.toCharArray();
		for(int i=0;i<ch.length;i++){
			if(Character.isDigit(ch[i]))
				sk.push(Double.valueOf(String.valueOf(ch[i])));
			else
				c(sk,ch[i]);
		}
		return sk.pop();
	}
	public void c(Stack<Double> sk,Character ch){
		switch(ch+0){
		case '+'+0:
			sk.push(sk.pop()+sk.pop());
			break;
		case '-'+0:
			double tmp=sk.pop();
			sk.push(sk.pop()-tmp);
			break;
		case '*'+0:
			sk.push(sk.pop()*sk.pop());
			break;
		case '/'+0:
			double temp=sk.pop();
			sk.push(sk.pop()/temp);
			break;
		case '^'+0:
			double tp=sk.pop();
			sk.push(Math.pow(sk.pop(),tp));
			break;
		case '%'+0:
			double mp=sk.pop();
			sk.push(sk.pop()%mp);
			break;
		default :
			throw new RuntimeException();
		}
	}
}//测试输入  6*2+(2^2+3*2/(3-1)^2)*(3-1)输出  23.0

后缀表达式的计算