本系列博客習題來自《算法(第四版)》,算是本人的讀書筆記,如果有人在讀這本書的,歡迎大家多多交流。為了方便討論,本人新建了一個微信群(算法交流),想要加入的,請添加我的微信號:zhujinhui207407 謝謝。另外,本人的個人博客 http://www.kyson.cn 也在不停的更新中,歡迎一起討論
算法(第4版)
知識點
- 管道
- 后綴表達式計算計算結果
題目
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壁紙寶貝上線了,歡迎大家下載。