算法实例练习记录——后序表达式求值(JAVA实现)

因为只考虑加减乘除的运算,所以比较简单,没有特别复杂的逻辑,利用一个栈的出栈、入栈操作就可以了。


 

下面是具体的代码实现 

import java.util.Stack;

/*
 * 编写一段程序,对给定的后序表达式,求值并打印结果。
 */

/*
 * 此程序因为只考虑加减乘除的操作,所以比较简单,核心就是用栈Stack的入栈,出栈来实现。
 * 注意一点就是,给定的后序表达式,需要在各个数字及操作符间添加空格符号,特别是结尾处。
 * 
 */
public class LastExpressValue {
	
	private static Stack<String> target=new Stack<String>();
	
	public static void lastExpressValue(String str) {
		
		String temp=new String();
		
		String operator="+-*/";
		
		double num1=0;
		double num2=0;
		double numresult=0;
		
		for(int i=0; i<str.length(); i++) {
			
			if(!str.substring(i,i+1).equals(" ")) {
					temp=temp+str.substring(i,i+1);
					
					continue;
			}
			else {
	
				if(!operator.contains(temp)) {
					target.push(temp);
					
				}
				if(operator.contains(temp)) {
					if(!target.isEmpty()) {
						num2=Double.parseDouble(target.pop());
						if(!target.isEmpty())
						num1=Double.parseDouble(target.pop());
					}
				
					if(temp.equals("+")) {
						numresult=num1+num2;
					}
					if(temp.equals("-")) {
						numresult=num1-num2;
					}
					if(temp.equals("*")) {
						numresult=num1*num2;
					}
					if(temp.equals("/")) {
						numresult=num1/num2;
					}
					target.push(Double.toString(numresult));
				
				}
				temp="";
			}
		}
		if(!target.isEmpty()) {
			numresult=Double.parseDouble(target.pop());
		}
		System.out.printf("%.2f%n",numresult);
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		lastExpressValue("1 9 + 5 * 3 8 1 - / / ");
		lastExpressValue("2 3 4 + * 7 - ");
		lastExpressValue("12 3 24 + * 17 - ");
	}

}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值