Blog Stats
Posts - 53
Articles - 4
Comments - 59
Trackbacks - 0
News
我使用新博客啦:
http://www.linjunhai.com/
大家到我的新博客上看看吧!
隨筆分類
(28)
JAVA天地(17)
其它相關(guān)(11)
文章分類
(4)
心情日志(4)
隨筆檔案
(53)
2011年5月 (2)
2011年4月 (1)
2011年3月 (1)
2010年12月 (1)
2010年9月 (1)
2010年8月 (1)
2010年5月 (1)
2010年3月 (1)
2009年11月 (1)
2009年10月 (1)
2009年7月 (1)
2009年5月 (2)
2009年1月 (2)
2008年12月 (11)
2008年11月 (2)
2008年10月 (1)
2008年9月 (1)
2008年7月 (3)
2008年6月 (1)
2007年10月 (1)
2007年8月 (1)
2007年7月 (3)
2007年4月 (1)
2007年3月 (3)
2006年12月 (4)
2006年11月 (5)
文章檔案
(4)
2007年5月 (2)
2007年4月 (2)
相冊
我的相冊
相關(guān)鏈接
Alvin's Blog
我現(xiàn)在使用的新博客.
CSS3 中文手冊
簡單實用的在線 CSS3 中文手冊
Scripts 學(xué)盟
不再悲催,體驗編寫腳本的樂趣!
給我留言
BlogJava 的留言板不用了, 用這個啦.
林俊海的博客
超級大菜鳥,每天要自強(qiáng)!
[JAVA]放個可以做簡單數(shù)學(xué)四則運(yùn)算的東東
遇到要求一个运算表达式的计算结果的问题
传进的是一个字符串 (字串内容当然是表达式了)
最终要求出运算结果
之前在 JScript 或 VBScript 里通常是 eval 来解决
下面给个 Java 的
只能算 +-*/ 还有括号
/** * (#)Calculator.java 创建时间:Apr 30, 2009 6:14:03 PM<br /> */ package cn.ialvin.util; import java.util.Stack; import java.util.regex.Pattern; /** * @author 林志斌(<b>ialvin.cn</b>) 广东 普宁 里湖 */ public class Calculator { public static void main(String[] args) { String exp = "-3.3 + 1.5 * (- 3 + -5)"; Calculator calculator = new Calculator(); System.out.println(calculator.cal(exp)); } public double cal(String exp) { exp = adj(exp); exp = conver(exp); Stack<Object> stack = new Stack<Object>(); String[] cs = exp.split("[^\\d.+\\-*/]+"); int i = 0; while (i < cs.length) { String c = cs
; i++; if ("+".equals(c)) { stack.push((Double)stack.pop() + (Double)stack.pop()); } else if ("-".equals(c)) { stack.push(0 - (Double)stack.pop() + (Double)stack.pop()); } else if ("*".equals(c)) { stack.push((Double)stack.pop() * (Double)stack.pop()); } else if ("/".equals(c)) { stack.push(1 / (Double)stack.pop() * (Double)stack.pop()); } else { stack.push(Double.parseDouble(c)); } } return Double.parseDouble(stack.pop().toString()); } private String adj(String exp) { exp = exp.replaceAll("[^\\d.+\\-*\\/()]+", ""); exp = exp.replaceAll("(^|[(+\\-*\\/])\\-([\\d.]+)", "$1(0-$2)"); return exp.replaceAll("[+\\-*\\/()]", " $0 ").trim(); } private String conver(String exp) { String[] str = exp.split("\\s+"); Stack<String> expStack = new Stack<String>(); for(int i = str.length - 1 ; i >= 0 ; i--) expStack.push(str
); Stack<String> outStack = new Stack<String>(); Stack<String> operStack = new Stack<String>(); operStack.push("#"); while (expStack.size()> 0) { String c = expStack.pop().toString(); if (c.matches("^\\d+(?:\\.\\d*)?$")) { outStack.push(c); } else if ("(".equals(c)) { operStack.push(c); } else if (")".equals(c)) { if (operStack.lastElement().equals("(")) { operStack.pop(); } else { expStack.push(c); outStack.push(operStack.pop()); } } else { if (comparison(c, operStack.lastElement())) outStack.push(operStack.pop()); operStack.push(c); } } operStack.remove(operStack.firstElement()); while(!operStack.empty()) outStack.push(operStack.pop()); return outStack.toString().replaceAll("\\[|\\]|\\,", ""); } private int getLevel(Object o) { if ("(".equals(o)) return 1; if ("+".equals(o)) return 2; if ("-".equals(o)) return 2; if ("*".equals(o)) return 3; if ("/".equals(o)) return 3; return -1; } private boolean comparison(String c1 ,Object c2) { return getLevel(c2)-getLevel(c1) >= 0; } }
posted on 2009-05-03 22:29
林俊海
閱讀(540)
評論(0)
編輯
收藏
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
Powered by:
.Text
and
ASP.NET
- Copyright © 林俊海
主站蜘蛛池模板:
久久性生大片免费观看性
|
免费看黄的成人APP
|
18禁超污无遮挡无码免费网站国产
|
亚洲乱亚洲乱妇无码
|
国产精品视频永久免费播放
|
亚洲国产精品综合福利专区
|
成人无码区免费A片视频WWW
|
亚洲精品天堂在线观看
|
免费无遮挡无遮羞在线看
|
国产免费私拍一区二区三区
|
在线观看亚洲免费
|
亚洲国产中文字幕在线观看
|
国产精品亚洲片在线va
|
免费看韩国黄a片在线观看
|
337P日本欧洲亚洲大胆艺术图
|
另类免费视频一区二区在线观看
|
日本免费人成视频播放
|
亚洲av日韩综合一区在线观看
|
91精品免费不卡在线观看
|
亚洲国产av高清无码
|
四虎永久免费影院在线
|
一级毛片高清免费播放
|
亚洲AV无码1区2区久久
|
亚洲精品免费在线视频
|
国产精一品亚洲二区在线播放
|
99精品视频在线观看免费专区
|
亚洲精品成人久久久
|
久久精品免费观看国产
|
自拍日韩亚洲一区在线
|
亚洲高清国产拍精品青青草原
|
亚洲av区一区二区三
|
两个人看的www免费高清
|
国产在线播放免费
|
黄视频在线观看免费
|
亚洲欧洲日产国码在线观看
|
永久免费看mv网站入口
|
在线人成免费视频69国产
|
色偷偷女男人的天堂亚洲网
|
免费一级特黄特色大片在线
|
亚洲精品久久久久无码AV片软件
|
久久久久久A亚洲欧洲AV冫
|