本系列博客习题来自《算法(第四版)》,算是本人的读书笔记,如果有人在读这本书的,欢迎大家多多交流。为了方便讨论,本人新建了一个微信群(算法交流),想要加入的,请添加我的微信号:zhujinhui207407 谢谢。另外,本人的个人博客 http://www.kyson.cn 也在不停的更新中,欢迎一起讨论
知识点
- 管道
- 后缀表达式计算计算结果
题目
1.3.11 编写一段程序EvaluatePostfix,从标准输入中得到一个后序表达式,求值并打印结果。(将上一题的程序中得到的输出用管道传递给这一段程序可以得到和Evaluate相同的行为)
1.3.11 Write a program EvaluatePostfix that takes a postfix expression from standard input, evaluates it, and prints the value. (Piping the output of your program from the previous exercise to this program gives equivalent behavior to Evaluate.
分析
本人所有简书的算法文章详细分析已经移入小专栏:算法四习题详解,欢迎大家订阅
答案
private static String evaluatePostfix(String expression) {
Stack<Double> vals = new Stack<Double>();
for (int j = 0; j < expression.length(); j++) {
char charAtIndex = expression.charAt(j);
String s = String.valueOf(charAtIndex);
if (s.equals("+")) {
Double valDouble1 = vals.pop();
Double valDouble2 = vals.pop();
s = valDouble1 + valDouble2 + "";
vals.push(Double.parseDouble(s));
}else if (s.equals("-")) {
Double valDouble1 = vals.pop();
Double valDouble2 = vals.pop();
s = valDouble1 - valDouble2 + "";
vals.push(Double.parseDouble(s));
}else if (s.equals("*")) {
Double valDouble1 = vals.pop();
Double valDouble2 = vals.pop();
s = valDouble1 * valDouble2 + "";
vals.push(Double.parseDouble(s));
}else if (s.equals("/")) {
Double valDouble1 = vals.pop();
Double valDouble2 = vals.pop();
s = valDouble1 / valDouble2 + "";
vals.push(Double.parseDouble(s));
}else {
vals.push(Double.parseDouble(s));
}
}
return vals.pop().toString();
}
代码索引
视频讲解
点此观看分析视频:顶级程序员教你学算法(31)-管道(1.3.11)
广告
我的首款个人开发的APP壁纸宝贝上线了,欢迎大家下载。