首页 > 代码库 > 后缀表达式的计算
后缀表达式的计算
/** * 后缀表达式的计算 * * 使用栈来保存结果 * * 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
后缀表达式的计算
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。