整数型后缀表达式求值

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

public class SuffixExpression {
        public static void main(String[] args){
        	String suffixExpression="4 5 * 8 - 60 + 8 2 / +";
        	List<String> list=getSuffixListString(suffixExpression);
        	int suffixResult=calculate(list);
        	System.out.println(suffixResult);
        }
        //将后缀表达式存入list集合中,这样便于遍历表达式所有字符
        public static List<String> getSuffixListString(String s){
        //以空格的方式分割每个要存入集合中的数或运算符,这样便于多位数的运算,如果以每个字符的方式放入集合中,如果出
        //现多位数还需要判断是否是多位数在存入集合
        	String[] suffix=s.split(" ");
        	List<String> list=new ArrayList<>();
        	for(int i=0;i<suffix.length;i++){
        		list.add(suffix[i]);
        	}
			return list;
        }
        //将存入list集合中的表达式遍历输出,判断是否是数字或者运算符
        public static int calculate(List<String> list){
        	Stack<String> stack=new Stack<>();
        	for(String item:list){
        		if(item.matches("\\d+")){//用正则表达式的方式来判断item是否是数字,是数字则压栈
        			stack.push(item);
        		}else {
        			//不是数字则弹栈,并完成相应的运算,把结果在压入栈中
        			int num1=Integer.parseInt(stack.pop());
        			int num2=Integer.parseInt(stack.pop());
        			int result=0;
        			if(item.equals("+")){
        				result=num1+num2;
        			}else if(item.equals("-")){
        				result=num2-num1;
        			}else if(item.equals("*")){
        				result=num1*num2;
        			}else if(item.equals("/")){
        				result=num2/num1;
        			}else{
        				throw new RuntimeException("运算符有误");
        			}
        			stack.push(""+result);//将每一次运算的结果在压入栈,用字符串拼接方式将int类型转为string类型             
        		}
        	}
        	//留在栈中的最后一个元素就是后缀表达式运算的最终结果
        	return Integer.parseInt(stack.pop());
        }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值