问题
编写一段程序EvaluatePostfix,从标准输入中得到一个后序表达式,求值并打印结果。
解决思路
后序表达式求解起来比较简单,读到数放入堆栈中,读到运算符,从堆栈中取数字进行运算,然后将结果放回堆栈。最后堆栈中只有一个元素,就是表达式的值。
代码
/** * Description : * Author : mn@furzoom.com * Date : Oct 20, 2016 1:36:55 PM * Copyright (c) 2013-2016, http://furzoom.com All Rights Reserved. */ package com.furzoom.lab.algs.ch103; import java.util.Scanner; /** * ClassName : E10311 <br> * Function : TODO ADD FUNCTION. <br> * date : Oct 20, 2016 1:36:55 PM <br> * * @version */ public class E10311 { private static int evaluatePostfix(String s) { String[] params = s.split(" "); Stack<Integer> stack = new Stack<Integer>(); for (String param : params) { if (param.equals("+")) { int d2 = stack.pop(); int d1 = stack.pop(); stack.push(d1 + d2); } else if (param.equals("-")) { int d2 = stack.pop(); int d1 = stack.pop(); stack.push(d1 - d2); } else if (param.equals("*")) { int d2 = stack.pop(); int d1 = stack.pop(); stack.push(d1 * d2); } else if (param.equals("/")) { int d2 = stack.pop(); int d1 = stack.pop(); stack.push(d1 / d2); } else { // number stack.push(Integer.parseInt(param)); } } return stack.pop(); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { System.out.println(evaluatePostfix(scanner.nextLine())); } scanner.close(); } }
结果:
1 2 + 3 4 - 5 6 - * * 3 1 2 3 4 5 * + 6 * * + 277