逆波兰表达式求值

本文介绍了一种使用栈数据结构来解析和计算逆波兰表达式的方法。通过Java实现了一个简单的计算器,该计算器能够处理基本的数学运算符,包括加、减、乘、除,并能够正确解析由整数和这些运算符组成的逆波兰表达式。
求逆波兰表达式的值。
在逆波兰表达法中,其有效的运算符号包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰计数表达。
样例
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9

["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6


import java.util.Scanner;
import java.util.Stack;

/**
 * 求逆波兰表达式的值。
在逆波兰表达法中,其有效的运算符号包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰计数表达。
样例
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
 * @author Dell
 *
 */
public class Test424 {
   public static int evalRPN(String[] tokens)
   {
	   Stack<Integer> s=new Stack<>();
	   for(int i=0;i<tokens.length;i++)
	   {
		   try{
			   int temp=Integer.parseInt(tokens[i]);
			   s.push(temp);
		   }catch(Exception e){
			   int a=s.pop();
			   int b=s.pop();
			   int result=0;
			   switch(tokens[i])
			   {
			   case "+": result=a+b;
			   break;
			   case "*": result=a*b;
			   break;
			   case "-": result=b-a;
			   break;
			   case "/": result=b/a;   
			   }
			   s.push(result);
		   }
		   
	   }
	  return s.pop(); 
	   
   }
	public static void main(String[] args) {
	   Scanner sc=new Scanner(System.in);
	   String s=sc.nextLine();
	   String[] tokens=s.split(",");
       System.out.println(evalRPN(tokens));
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值