E81086713E446D36F62B2AA2A3502B5EB155
Java雜家
雜七雜八。。。一家之言
BlogJava
首頁
新隨筆
聯系
聚合
管理
40 Posts :: 1 Stories :: 174 Comments :: 0 Trackbacks
公告
所有文章和代碼除非特別說明, 均為本blog作者原創,轉載請注明出處和原作者. 謝謝!
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(15)
給我留言
查看公開留言
查看私人留言
隨筆分類
Memorandum (17)
隨筆檔案
2011年12月 (1)
2011年2月 (1)
2009年12月 (1)
2009年11月 (1)
2009年5月 (1)
2009年4月 (2)
2009年1月 (2)
2008年12月 (1)
2008年6月 (3)
2008年5月 (1)
2008年3月 (2)
2008年2月 (1)
2007年12月 (9)
2007年10月 (2)
2007年9月 (1)
2007年7月 (2)
2007年5月 (2)
2007年4月 (1)
2007年3月 (2)
2007年2月 (1)
2007年1月 (4)
相冊
code
搜索
積分與排名
積分 - 184533
排名 - 314
最新評論
1.?re: 運行時注入你的Java代碼到一個已經在運行的Java程序
wroker.dll 和 vmattach.dll有源碼嗎?求分享
--ww
2.?re: 向上取整的一個應用
當N等于0的時候貌似不成立
--上海碼農
3.?re: 紅黑樹的Java實現
怎么找到這個DefaultBSTree和BSTree???@new
--super fly
4.?re: 紅黑樹的Java實現
想問一下,這個是完整,直接能用的代碼嗎???好像是不怎么行耶?
--super fly
5.?re: 紅黑樹的Java實現
評論內容較長,點擊標題查看
--new
閱讀排行榜
1.?排序算法復習(Java實現)(一): 插入,冒泡,選擇,Shell,快速排序(36720)
2.?排序算法復習(Java實現)(二): 歸并排序,堆排序,桶式排序,基數排序(15418)
3.?紅黑樹的Java實現(8509)
4.?WebLogic中攔截全局http請求(7972)
5.?重寫BASE64Encoder(6591)
評論排行榜
1.?Java轉EXE文件工具(23)
2.?紅黑樹的Java實現(20)
3.?排序算法復習(Java實現)(一): 插入,冒泡,選擇,Shell,快速排序(15)
4.?排序算法復習(Java實現)(二): 歸并排序,堆排序,桶式排序,基數排序(11)
5.?Java2EXE Builder 1.0.0(9)
表達式求值Java粗糙版
/**
*
*/
package
com.yovn.algo;
import
java.util.Stack;
import
java.util.Vector;
/**
*
@author
yovn
*
*/
public
class
Caculator {
class
Item
{
boolean
ops;
int
value;
Character opVal;
int
opPriority;
}
Stack
<
Item
>
opStack
=
new
Stack
<
Item
>
();
Vector
<
Item
>
calcStack
=
new
Vector
<
Item
>
();
/**
*
*/
public
Caculator() {
//
TODO Auto-generated constructor stub
}
public
int
calc()
{
Stack
<
Item
>
tmp
=
new
Stack
<
Item
>
();
while
(
!
calcStack.isEmpty())
{
Item it
=
calcStack.remove(
0
);
if
(
!
it.ops)
{
tmp.push(it);
}
else
{
int
op2
=
tmp.pop().value;
int
op1
=
tmp.pop().value;
Item newItem
=
new
Item();
newItem.ops
=
true
;
switch
(it.opVal)
{
case
'
+
'
:
newItem.value
=
op1
+
op2;
break
;
case
'
-
'
:
newItem.value
=
op1
-
op2;
break
;
case
'
*
'
:
newItem.value
=
op1
*
op2;
break
;
case
'
/
'
:
newItem.value
=
op1
/
op2;
break
;
}
tmp.push(newItem);
}
}
return
tmp.pop().value;
}
/**
* 1)數字直接輸出
* 2)開括號則壓棧
* 3)閉括號把棧中元素依次輸出直到遇到開括號
* 4)運算符時
* a)循環,當棧非空,并且棧頂元素不是開括號,并且棧頂運算符優先級不低于輸入的運算符的優先級,反復將其輸出
* b)把輸入運算符壓棧
* 5)輸出棧內剩余元素
*
@param
in
*
@return
*/
public
String transInfixToPosfix(String in)
{
char
[] cin
=
in.toCharArray();
StringBuffer buffer
=
new
StringBuffer();
for
(
int
i
=
0
;i
<
cin.length;i
++
)
{
Item newItem
=
new
Item();
newItem.opPriority
=
1
;
newItem.ops
=
false
;
switch
(cin[i])
{
case
'
+
'
:
newItem.opPriority
=
1
;
newItem.ops
=
true
;
newItem.opVal
=
'
+
'
;
doOps(buffer, newItem);
break
;
case
'
-
'
:
newItem.opPriority
=
1
;
newItem.ops
=
true
;
newItem.opVal
=
'
-
'
;
doOps(buffer, newItem);
break
;
case
'
*
'
:
newItem.opPriority
=
2
;
newItem.ops
=
true
;
newItem.opVal
=
'
*
'
;
doOps(buffer, newItem);
break
;
case
'
/
'
:
newItem.opPriority
=
2
;
newItem.ops
=
true
;
newItem.opVal
=
'
/
'
;
doOps(buffer, newItem);
break
;
case
'
(
'
:
newItem.ops
=
true
;
newItem.opVal
=
'
(
'
;
opStack.push(newItem);
break
;
case
'
)
'
:
boolean
meetClose
=
false
;
while
(
!
opStack.isEmpty())
{
Item item
=
opStack.peek();
if
(item.ops
&&
item.opVal
!=
'
(
'
)
{
calcStack.add(item);
opStack.pop();
buffer.append(item.opVal);
}
else
if
(item.ops)
{
opStack.pop();
meetClose
=
true
;
break
;
}
}
if
(
!
meetClose)
{
throw
new
RuntimeException();
}
break
;
default
:
int
j
=
i;
for
(;j
<
cin.length
&&
cin[j]
>=
'
0
'
&&
cin[j]
<=
'
9
'
;j
++
);
if
(j
==
i)
{
throw
new
RuntimeException(
"
wrong input
.
"
);
}
newItem.ops
=
false
;
newItem.value
=
Integer.parseInt(
new
String(cin,i,j
-
i));
buffer.append(newItem.value);
calcStack.add(newItem);
i
=
j
-
1
;
break
;
}
}
while
(
!
opStack.isEmpty())
{
Item item
=
opStack.pop();
calcStack.add(item);
buffer.append(item.opVal);
}
return
buffer.toString();
}
private
void
doOps(StringBuffer buffer, Item newItem) {
while
(
!
opStack.isEmpty())
{
Item item
=
opStack.peek();
if
(item.opVal
!=
'
(
'
&&
item.opPriority
>=
newItem.opPriority)
{
calcStack.add(item);
opStack.pop();
buffer.append(item.opVal);
}
else
{
break
;
}
}
opStack.push(newItem);
}
/**
*
@param
args
*/
public
static
void
main(String[] args) {
Caculator calc
=
new
Caculator();
System.out.println(
"
1+2*3+7-(4/2+8)/5=
"
+
calc.transInfixToPosfix(
"
1+2*3+7-(4/2+8)/5
"
));
System.out.println(
"
value is:
"
+
calc.calc());
}
}
posted on 2007-10-09 22:48
DoubleH
閱讀(1001)
評論(1)
編輯
收藏
所屬分類:
Memorandum
Feedback
#
re: 表達式求值Java粗糙版
2007-12-20 21:45
sitinspring
以后要多來看看.
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
求連續正整數使得其和為給定的一個正整數的構造性解法
向上取整的一個應用
《算法概論》第一章習題35證明(Wilson定理)
有意思的“電燈泡問題”
伸展樹與半伸展樹Java實現
一種新的AVL平衡樹刪除操作的實現
使用贏者樹的外部排序
圖及其算法復習(Java實現) 三:最小支撐樹(Prim,Kruskal算法)
圖及其算法復習(Java實現) 二:拓撲排序,最短路徑問題
圖及其算法復習(Java實現) 一:存儲結構,深度優先周游,廣度優先周游
Powered by:
BlogJava
Copyright © DoubleH
主站蜘蛛池模板:
金华市
|
沙湾县
|
灵丘县
|
潮安县
|
禹州市
|
轮台县
|
平昌县
|
桃源县
|
措勤县
|
苏尼特左旗
|
石景山区
|
宁明县
|
万州区
|
石阡县
|
锡林郭勒盟
|
梁平县
|
桂东县
|
三穗县
|
湛江市
|
夏津县
|
亳州市
|
突泉县
|
昌吉市
|
凯里市
|
福建省
|
河北区
|
内江市
|
鹤岗市
|
绵阳市
|
阿巴嘎旗
|
贵南县
|
寻乌县
|
思南县
|
丰镇市
|
会同县
|
墨脱县
|
昌黎县
|
铁岭市
|
嘉祥县
|
贡觉县
|
维西
|