版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 10信計(jì)2011-2012(二)</p><p> 《Java程序設(shè)計(jì)》課程設(shè)計(jì)</p><p> 設(shè)計(jì)題目 模擬科學(xué)計(jì)算器 </p><p> 設(shè)計(jì)時(shí)間 </p><p> 學(xué)生姓名
2、 </p><p> 學(xué)生學(xué)號(hào) </p><p> 所在班級(jí) </p><p> 指導(dǎo)教師 </p><p><b> 摘要</b><
3、;/p><p> 計(jì)算器在我們的生活中常常會(huì)使用到,本次課程設(shè)計(jì),通過(guò)界面以及其中的邏輯處理,完成了四則運(yùn)算的處理。通過(guò)awt包或者swing包中的界面設(shè)計(jì)部分對(duì)界面設(shè)計(jì)的細(xì)節(jié)可以有更多的了解。利用面向?qū)ο蟮乃枷?,將各個(gè)組件的事件響應(yīng)分別用不同的類(lèi)表達(dá)出來(lái)。面向?qū)ο蟮乃枷霃暮艽蟪潭壬峡梢宰尦绦虻乃悸犯忧逦铱芍赜眯院芨?。?duì)于具有相同事件響;應(yīng)的組件則可以調(diào)用相同的類(lèi)來(lái)處理事件。除此之外,利用棧的知識(shí)來(lái)解決運(yùn)算
4、符優(yōu)先的問(wèn)題也讓我們對(duì)java中的棧有了更多的了解。</p><p> 關(guān)鍵詞 java;計(jì)算器;四則運(yùn)算;面向?qū)ο?;?lt;/p><p><b> 目 錄</b></p><p> 1需求分析…………………………………………………………………………….1</p><p> 1.1該計(jì)算器完成的功能……
5、……………………………………………………..1</p><p> 1.2出錯(cuò)處理……………………………………………………………………..1</p><p> 1.3數(shù)據(jù)處理……………………………………………………………………..1</p><p> 2設(shè)計(jì)方案…………………………………………………………………………….1</p><p>
6、; 2.1設(shè)計(jì)方法………………………………………………………………………..1</p><p> 2.2界面布局………………………………………………………………………..1</p><p> 3系統(tǒng)設(shè)計(jì)…………………………………………………………………………….2</p><p> 3.1界面設(shè)計(jì)………………………………………………………………………..2&
7、lt;/p><p> 3.2功能模塊………………………………………………………………………..2</p><p> 3.2.1功能模塊的設(shè)計(jì)方案……………………………………………………...2</p><p> 3.2.2功能模塊的實(shí)現(xiàn)方法………………………………………………………3</p><p> 4系統(tǒng)的開(kāi)發(fā)和運(yùn)行環(huán)境及安裝配置說(shuō)明
8、………………………………………….3</p><p> 5系統(tǒng)測(cè)試截圖……………………………………………………………………….4</p><p> 5.1系統(tǒng)初始運(yùn)行界面……………………………………………………………..4</p><p> 5.2計(jì)算器按鍵測(cè)試………………………………………………………………..4</p><p>
9、5.3運(yùn)算符重復(fù)輸入測(cè)試…………………………………………………………..4</p><p> 5.4被除數(shù)為0的測(cè)試……………………………………………………………..5</p><p> 5.5小數(shù)點(diǎn)重復(fù)性檢查……………………………………………………………..5</p><p> 5.6 backspace按鍵越界操作………………………………………………………
10、.6</p><p> 5.7優(yōu)先級(jí)程序計(jì)算………………………………………………………………..6</p><p> 5.8計(jì)算結(jié)果………………………………………………………………………..7</p><p> 6總結(jié)與心得體會(huì)…………………………………………………………………….7</p><p> 附錄……………………………………
11、………………………………………………9</p><p><b> 1需求分析</b></p><p> 1.1該計(jì)算器完成的功能</p><p> 用戶(hù)能夠完成四則混合運(yùn)算+、-、*、/,并且計(jì)算器能夠自動(dòng)的識(shí)別運(yùn)算符的優(yōu)先級(jí),根據(jù)輸入的運(yùn)算公式,自動(dòng)計(jì)算出相應(yīng)的結(jié)果。同時(shí)完成計(jì)算器中的backspace、ce按鈕,能夠完成消除或者刪除的
12、功能。</p><p><b> 1.2出錯(cuò)處理</b></p><p> 當(dāng)用戶(hù)如果按下的是除零的操作,顯示框?qū)@示“被除數(shù)不能為0”。</p><p> 當(dāng)用戶(hù)如果連續(xù)多次按下運(yùn)算符,計(jì)算器自動(dòng)記憶第一次運(yùn)算符,并且做防連續(xù)輸入相同的運(yùn)算符或者是不同的運(yùn)算符。</p><p> 當(dāng)用戶(hù)在同一個(gè)數(shù)據(jù)中多次輸入小
13、數(shù)點(diǎn),計(jì)算器能夠自動(dòng)判斷小數(shù)點(diǎn)重復(fù),自動(dòng)只記憶第一個(gè)小數(shù)點(diǎn)。</p><p> 當(dāng)用戶(hù)在同一個(gè)數(shù)據(jù)中輸入多個(gè)負(fù)號(hào),計(jì)算器能夠自動(dòng)做重復(fù)檢查,不顯示多余的負(fù)號(hào)。</p><p> 當(dāng)用戶(hù)在使用backspace功能刪除越界數(shù)據(jù)時(shí)候,計(jì)算器自動(dòng)做相應(yīng)處理。</p><p><b> 1.3數(shù)據(jù)處理</b></p><p&g
14、t; 在程序的起始,建立了兩個(gè)棧,分別用來(lái)存儲(chǔ)操作數(shù)和操作符。在計(jì)算器的核心運(yùn)算代買(mǎi)中,運(yùn)用這兩個(gè)棧來(lái)實(shí)現(xiàn)算法中的優(yōu)先級(jí)的處理,使用“#”號(hào)來(lái)標(biāo)記目標(biāo)計(jì)算公式的結(jié)束。目標(biāo)計(jì)算公式通過(guò)計(jì)算器的鍵盤(pán)實(shí)現(xiàn)輸入,當(dāng)按下“=”號(hào)之后,計(jì)算器通過(guò)調(diào)用計(jì)算器核心函數(shù)來(lái)實(shí)現(xiàn)數(shù)據(jù)的處理。</p><p><b> 2設(shè)計(jì)方案</b></p><p><b> 2.1設(shè)計(jì)
15、方法</b></p><p> 本程序的實(shí)現(xiàn)使用了swing和awt兩個(gè)包,主題程序界面按鍵根據(jù)微軟計(jì)算器的布置界面進(jìn)行設(shè)置,采用比較人性化的常規(guī)按鍵排布。返回計(jì)算結(jié)果的“=”號(hào)鍵使用了兩倍于普通按鍵面積的設(shè)計(jì),使的擊中的概率更加大。</p><p><b> 2.2界面布局</b></p><p> 整體界面是采用了Bord
16、erLayout布局,通過(guò)4個(gè)panel進(jìn)行布局的詳細(xì)劃分,panel3用來(lái)存儲(chǔ)位于panel4左下角的GridLayout(1,2,4,4)布局,panel1、panel2、panel3分別用來(lái)表示BorderLayout的上中下三個(gè)模塊。</p><p> Panel1中添加了一個(gè)Label display,display用來(lái)作為顯示器,實(shí)時(shí)的顯示輸入和計(jì)算的數(shù)據(jù)。其中display需要設(shè)置為右對(duì)齊和只讀屬
17、性。</p><p> Panel2中添加數(shù)字輸入鍵和基本操作符鍵,panel采用了GridLayout布局,將整個(gè)panel2平分為4*4個(gè)空間,其中,數(shù)字鍵采用了15磅字體和藍(lán)色文字,操作符采用了15磅字體和紅色文字,是的界面更加顯眼和便于區(qū)分。</p><p> Panel4中首先劃分為GridLayout(1,2,4,4),在Panel4中,再次使用了GridLayout(1,
18、2,4,4)將panel4的左側(cè)一分為二,左邊為panle3,這個(gè)的基礎(chǔ)上程序往panel3中添加了backspace和ce兩個(gè)按鍵,在Panel4的右側(cè)單元格中添加了“=”號(hào)按鈕,這個(gè)時(shí)候的“=”號(hào)就是相當(dāng)于兩個(gè)普通按鈕的長(zhǎng)度和大小。</p><p><b> 3系統(tǒng)設(shè)計(jì)</b></p><p><b> 3.1界面設(shè)計(jì)</b></p
19、><p> 圖3-1 系統(tǒng)初始運(yùn)行界面截圖</p><p> 這個(gè)就是計(jì)算器界面,簡(jiǎn)潔易用,我們可以從中的數(shù)字按鍵和運(yùn)算符按鈕進(jìn)行相應(yīng)的數(shù)學(xué)計(jì)算,總共由19個(gè)按鈕(10個(gè)數(shù)字符+5個(gè)運(yùn)算符號(hào)+1個(gè)小數(shù)點(diǎn)+1個(gè)“+/-”按鈕+1個(gè)“clear”按鈕+1個(gè)“backspace”按鈕)。</p><p><b> 3.2功能模塊</b></p
20、><p> 3.2.1功能模塊的設(shè)計(jì)方案</p><p> 本次程序設(shè)計(jì)一共分為了5個(gè)類(lèi),每個(gè)類(lèi)都各自完成不同的功能:</p><p> ?。?)class MyCalculator: 類(lèi)MyCalculator是主類(lèi),含有main()函數(shù),通過(guò)new CalFrame()來(lái)運(yùn)行程序。</p><p> (2)class CalFrame
21、: 類(lèi)CalFrame完成的功能是計(jì)算器界面的設(shè)計(jì),并且將每個(gè)組件都添加事件響應(yīng)。具體的事件響應(yīng)操作將在其他的類(lèi)中逐一實(shí)現(xiàn)。</p><p> ?。?)class HandleWin:點(diǎn)擊關(guān)閉windows窗口的控制類(lèi)。</p><p> ?。?)class HandleNum:字符串輸入控制類(lèi)。</p><p> ?。?)Class HandleEqual:等號(hào)出
22、發(fā)事件的響應(yīng)機(jī)制類(lèi)。</p><p> 3.2.2功能模塊的實(shí)現(xiàn)方法</p><p> ?。?)public void actionPerformed(ActionEvent e)</p><p> 當(dāng)按下了控制按鈕,根據(jù)搜索控制開(kāi)關(guān)來(lái)確定能否繼續(xù)添加,各個(gè)相應(yīng)的處理機(jī)制。</p><p> ?。?)public double segme
23、ntation(String myString)</p><p> 字符串優(yōu)先級(jí)計(jì)算代碼的核心函數(shù)。</p><p> ?。?)public int compare(char ch1,char ch2)</p><p> 1值為ch1大于ch2;-1為ch1小于ch2;0為ch1等于ch2</p><p> ?。?)public doub
24、le oprate(double a,char b,double ce)</p><p> 通過(guò)參數(shù)b來(lái)判斷加減乘除</p><p> 4系統(tǒng)的開(kāi)發(fā)和運(yùn)行環(huán)境及安裝配置說(shuō)明</p><p> 本系統(tǒng)是利用Java語(yǔ)言在NetBeans IDE6.5環(huán)境下開(kāi)發(fā)的,Java語(yǔ)言是當(dāng)今流行的網(wǎng)絡(luò)編程語(yǔ)言,它具有面向?qū)ο?、跨平臺(tái)、分布應(yīng)用等特點(diǎn)。面向?qū)ο蟮拈_(kāi)發(fā)方法是當(dāng)
25、今世界最流行的開(kāi)發(fā)方法,它不僅具有更貼近自然的語(yǔ)義,而且有利于軟件的維護(hù)和繼承。</p><p> 為了進(jìn)一步鞏固課堂上所學(xué)到的知識(shí),深刻把握J(rèn)ava語(yǔ)言的重要概念及其面向?qū)ο蟮奶匦?,鍛煉學(xué)生熟練的應(yīng)用面向?qū)ο蟮乃枷牒驮O(shè)計(jì)方法解決實(shí)際問(wèn)題的能力,開(kāi)設(shè)了Java程序設(shè)計(jì)課程設(shè)計(jì)。</p><p> 通過(guò)此次課程設(shè)計(jì),鞏固所學(xué)Java語(yǔ)言基本知識(shí),增進(jìn)Java語(yǔ)言編輯基本功,掌握J(rèn)DK、E
26、ditplus、Eclipse、JCreator等開(kāi)發(fā)工具的運(yùn)用,拓寬常用類(lèi)庫(kù)的應(yīng)用。使學(xué)生通過(guò)該教學(xué)環(huán)節(jié)與手段,把所學(xué)課程及相關(guān)知識(shí)加以融會(huì)貫通,全面掌握J(rèn)ava語(yǔ)言的編程思想及面向?qū)ο蟪绦蛟O(shè)計(jì)的方法,為今后從事實(shí)際工作打下堅(jiān)實(shí)的基礎(chǔ)。</p><p><b> 5系統(tǒng)測(cè)試截圖</b></p><p> 5.1系統(tǒng)初始運(yùn)行界面</p><p&
27、gt; 圖5-1 系統(tǒng)初始運(yùn)行界面截圖</p><p> 5.2計(jì)算器按鍵測(cè)試</p><p> 圖5-2 系統(tǒng)按鍵測(cè)試截圖</p><p> 5.3運(yùn)算符重復(fù)輸入測(cè)試</p><p> 圖5-3 加號(hào)重復(fù)輸入測(cè)試截圖</p><p> 5.4被除數(shù)為0的測(cè)試</p><p> 圖
28、5-4的結(jié)果Infinity截圖</p><p> 5.5小數(shù)點(diǎn)重復(fù)性檢查</p><p> 圖5-5小數(shù)點(diǎn)重復(fù)輸入錯(cuò)誤檢查截圖</p><p> 5.6backspace按鍵越界操作</p><p> 圖5-6使用backspace鍵做越界操作的截圖</p><p> 5.7優(yōu)先級(jí)程序計(jì)算</p>
29、;<p> 圖7 計(jì)算2/3+6*9-3截圖</p><p><b> 5.8計(jì)算結(jié)果</b></p><p> 圖5-8上面有優(yōu)先級(jí)的公式計(jì)算結(jié)果</p><p><b> 6總結(jié)與心得體會(huì)</b></p><p> 這個(gè)學(xué)期的java課程設(shè)計(jì)--計(jì)算器對(duì)我來(lái)說(shuō)是一個(gè)不斷學(xué)
30、習(xí),逐步完善的過(guò)程。開(kāi)始的時(shí)候拿到題目看到只有四則混合運(yùn)算就理所當(dāng)然的認(rèn)為應(yīng)該是非常簡(jiǎn)單的的一個(gè)程序而已。</p><p> 首先開(kāi)始了程序的界面的設(shè)計(jì)。并且將一些簡(jiǎn)單的按鈕的事件響應(yīng)完成了。剩下了運(yùn)算符優(yōu)先級(jí)的問(wèn)題以及數(shù)據(jù)的處理問(wèn)題。于是在同學(xué)的幫助下利用正則表達(dá)式來(lái)完成輸入字符串的切割,但是如果自己一個(gè)人單挑來(lái)說(shuō),對(duì)于題目中的數(shù)據(jù)處理的問(wèn)題一時(shí)不知道該如何與正則表達(dá)式連接上。最后我還是選擇用棧來(lái)處理。這個(gè)過(guò)
31、程讓我明白了學(xué)習(xí)知識(shí)的時(shí)候?qū)嵺`與理論之間是有很大的差異的。應(yīng)用能力我還有待加強(qiáng)。于是我開(kāi)始熟悉棧的使用。以前在c++的學(xué)習(xí)中接觸過(guò)棧,這次的使用思想是一樣的,只需要在了解一下java 中的相關(guān)一些函數(shù)便可。但實(shí)際在寫(xiě)程序的過(guò)程中,由于有一些特殊情況的考慮與進(jìn)出入棧的聯(lián)系,還是碰到了一些問(wèn)題。但在后來(lái)我慢慢的整理清楚思路以后,邏輯列清楚了,便也將這些問(wèn)題解決了。逐步的將各項(xiàng)功能都完善了。當(dāng)然目前我的計(jì)算器也只是完成了四則混合運(yùn)算,實(shí)際上還
32、應(yīng)該有很多功能可以添加入計(jì)算器的。</p><p> 本次java課程設(shè)計(jì)也讓我明白只要我一步步去做,那么程序功能便會(huì)不斷強(qiáng)大。同時(shí)很重要的一點(diǎn)便是以后要多加強(qiáng)自己的動(dòng)手實(shí)踐能力。</p><p><b> 附錄:</b></p><p><b> 源代碼:</b></p><p> imp
33、ort java.awt.*;</p><p> import java.awt.event.*;</p><p> import javax.swing.*;</p><p> import java.util.*;</p><p> import java.util.regex.Matcher;</p><p&
34、gt; import java.util.regex.Pattern;</p><p> public class MyCalculator {</p><p> public static void main(String[] args){</p><p> new CalFrame();</p><p><b> }
35、</b></p><p><b> }</b></p><p> class CalFrame extends JFrame {</p><p> String opnt,optr; </p><p> Stack <Double> OPNT = new Stack <Double
36、> ();</p><p> Stack <String> OPTR = new Stack <String> (); </p><p> Label display; //顯示</p><p> JButton []num = new JButton[10];//按鍵設(shè)計(jì)</p><p>
37、JButton plus; JButton minus; JButton mutiply; JButton divide; </p><p> JButton bs;JButton ce;JButton equal;</p><p> JButton point; JButton sign;JButton lbracket; JButton rbracket;</p>&
38、lt;p> Panel p1,p2,p3,p4;</p><p> String disp = "";//用戶(hù)輸入的表達(dá)式</p><p> String result = "" ;//用戶(hù)輸入的字符串</p><p> CalFrame(){</p><p> OPTR.push(&q
39、uot;#");</p><p> for(int i=0;i<=9;++i){</p><p> num[i] = new JButton(String.valueOf(i));</p><p><b> }</b></p><p> plus = new JButton("+&quo
40、t;); </p><p> plus.setForeground(Color.red);</p><p> plus.setFont(new Font("Dialog",1,15));</p><p> minus = new JButton("-");</p><p> minus.setF
41、oreground(Color.red);</p><p> minus.setFont(new Font("Dialog",1,15));</p><p> mutiply = new JButton("*"); </p><p> mutiply.setForeground(Color.red);</p>
42、;<p> mutiply.setFont(new Font("Dialog",1,15));</p><p> divide = new JButton("/"); </p><p> divide.setForeground(Color.red);</p><p> divide.setFont(ne
43、w Font("Dialog",1,15));</p><p> equal = new JButton("="); </p><p> equal.setForeground(Color.red);</p><p> equal.setFont(new Font("Dialog",1,15));&l
44、t;/p><p> point = new JButton(".");</p><p> point.setFont(new Font("Dialog",1,15));</p><p> sign = new JButton("+/-");</p><p> sign.setFo
45、nt(new Font("Dialog",1,15));</p><p> bs = new JButton("backspace");</p><p> bs.setForeground(Color.red);</p><p> bs.setFont(new Font("Dialog",1,8));
46、</p><p> ce = new JButton("ce");</p><p> ce.setFont(new Font("Dialog",1,15));</p><p> p1 = new Panel();</p><p> p1.setLayout(new BorderLayout()
47、);</p><p> display = new Label("0.",Label.RIGHT);</p><p> display.setBackground(Color.white);</p><p> p1.add(display,BorderLayout.NORTH);</p><p> p2 = new
48、 Panel();</p><p> p2.setLayout(new GridLayout(4,4,4,4));</p><p> p2.add(num[7]);p2.add(num[8]);p2.add(num[9]);p2.add(divide);</p><p> p2.add(num[4]);p2.add(num[5]);p2.add(num[6])
49、;p2.add(mutiply); </p><p> p2.add(num[1]);p2.add(num[2]);p2.add(num[3]);p2.add(minus);</p><p> p2.add(num[0]);p2.add(sign);p2.add(point);p2.add(plus);</p><p> p3 = new Panel(new
50、GridLayout(1,2,4,4));</p><p> p3.add(bs);p3.add(ce);</p><p> p4 = new Panel(new GridLayout(1,2,4,4));</p><p> p4.add(p3);</p><p> p4.add(equal);</p><p>
51、; setTitle("計(jì)算器");</p><p> setLayout(new BorderLayout());</p><p> add(p1,BorderLayout.NORTH); </p><p> add(p2,BorderLayout.CENTER);</p><p> add(p4,Border
52、Layout.SOUTH);</p><p> setVisible(true);</p><p><b> pack();</b></p><p> setResizable(false);</p><p> setBounds(600,350,300,230);</p><p> a
53、ddWindowListener(new HandleWin());</p><p> for(int i=0;i<=9;++i){</p><p> num[i].setForeground(Color.blue);</p><p> num[i].setFont(new Font("Dialog",1,15));</p>
54、;<p> num[i].addActionListener(new HandleNum(this,i));</p><p><b> }</b></p><p> plus.addActionListener(new HandleNum(this));</p><p> minus.addActionListener(n
55、ew HandleNum(this));</p><p> mutiply.addActionListener(new HandleNum(this));</p><p> divide.addActionListener(new HandleNum(this));</p><p> point.addActionListener(new HandleNum(
56、this));</p><p> sign.addActionListener(new HandleNum(this));</p><p> bs.addActionListener(new HandleNum(this));</p><p> ce.addActionListener(new HandleNum(this));</p><
57、p> equal.addActionListener (new HandleEqual(this));</p><p><b> } </b></p><p> class HandleWin extends WindowAdapter{//關(guān)閉計(jì)算器</p><p> public void windowClosing(Win
58、dowEvent e){</p><p> (e.getWindow()).dispose();</p><p> System.exit(0);</p><p><b> }</b></p><p><b> } </b></p><p> boolean po
59、intswitch = true;//小數(shù)點(diǎn)開(kāi)關(guān)</p><p> boolean oprateswitch = false;//運(yùn)算符開(kāi)關(guān)</p><p> boolean siginswitch = true;// </p><p> class HandleNum implements ActionListener{//字符串的輸入</p>
60、<p> JFrame my_Num;</p><p> int itemp = 0;</p><p> HandleNum(JFrame f,int a){</p><p> my_Num = f;</p><p> itemp = a;</p><p><b> }</b&
61、gt;</p><p> HandleNum(JFrame f){</p><p> my_Num = f;</p><p><b> }</b></p><p> public void actionPerformed(ActionEvent e){</p><p> if(e.get
62、Source()==num[itemp]){//輸入數(shù)字字符</p><p> oprateswitch = true;</p><p> siginswitch = false;</p><p> disp = disp + itemp;</p><p> display.setText(disp);</p><
63、p><b> }</b></p><p> if(oprateswitch&&e.getSource()==plus){//輸入加號(hào) </p><p> pointswitch = true;</p><p> oprateswitch = false;</p><p> siginswi
64、tch = true;</p><p> disp = disp + "+";</p><p> display.setText(disp);</p><p><b> }</b></p><p> if(oprateswitch&&e.getSource()==minus){
65、//輸入減號(hào)</p><p> pointswitch = true;</p><p> oprateswitch = false;</p><p> siginswitch = true;</p><p> disp = disp + "-";</p><p> display.setT
66、ext(disp);</p><p><b> }</b></p><p> if(oprateswitch&&e.getSource()==mutiply){//輸入乘號(hào)</p><p> pointswitch = true;</p><p> oprateswitch = false;<
67、;/p><p> siginswitch = true;</p><p> disp = disp + "*";</p><p> display.setText(disp);</p><p><b> }</b></p><p> if(oprateswitch&
68、;&e.getSource()==divide){//輸入除號(hào)</p><p> pointswitch = true;</p><p> oprateswitch = false;</p><p> siginswitch = true;</p><p> disp = disp + "/";</p
69、><p> display.setText(disp);</p><p><b> }</b></p><p> if(oprateswitch&&pointswitch==true&&e.getSource()==point){//輸入小數(shù)點(diǎn)</p><p> pointswitch
70、 = false;</p><p> oprateswitch = false;</p><p> siginswitch = false;</p><p> disp = disp + ".";</p><p> display.setText(disp);</p><p><b&g
71、t; }</b></p><p> if(siginswitch&&e.getSource()==sign){//輸入負(fù)號(hào)</p><p> disp = disp + "—";</p><p> display.setText(disp);</p><p><b> }&l
72、t;/b></p><p> if(e.getSource()==bs){//點(diǎn)擊backspace</p><p> if(!disp.isEmpty()){</p><p> disp = disp.substring(0,disp.length()-1);</p><p> if(disp.isEmpty())
73、</p><p><b> disp=" ";</b></p><p> display.setText(disp);</p><p><b> }</b></p><p><b> }</b></p><p> if(e.
74、getSource()==ce){//點(diǎn)擊ce</p><p> disp = " ";</p><p> display.setText(disp);</p><p><b> }</b></p><p><b> }</b></p><p>&
75、lt;b> }</b></p><p> class HandleEqual implements ActionListener{// 等于號(hào)觸發(fā)的事件</p><p> Frame my_Equal; </p><p> HandleEqual(JFrame f){</p><p> my_Equal = f;
76、</p><p><b> }</b></p><p> public void actionPerformed(ActionEvent e){</p><p> if(e.getSource()==equal){</p><p> disp = disp+"#";</p>&l
77、t;p> disp = String.valueOf(segmentation(disp));</p><p> display.setText(disp);</p><p> disp = "";</p><p> pointswitch = true;//小數(shù)點(diǎn)開(kāi)關(guān)</p><p> oprateswi
78、tch = false;//運(yùn)算符開(kāi)關(guān)</p><p> siginswitch = true;//符號(hào)開(kāi)關(guān)</p><p><b> }</b></p><p><b> }</b></p><p> public double segmentation(String myStrin
79、g){</p><p> String reg = "(\\—?\\d+\\.?\\d*)|([-+*/()#])"; //分割表達(dá)式.</p><p> Pattern p = Pattern.compile(reg);</p><p> Matcher m = p.matcher(myString);</p><p
80、> String find = "";</p><p> double num = 0;</p><p> double op1,op2;</p><p><b> char op3;</b></p><p> while(m.find()){</p><p>
81、 find = m.group();</p><p> find = find.replace('—','-');</p><p><b> try{</b></p><p> num = Double.valueOf(find);</p><p> OPNT.push(num)
82、;</p><p> }catch(NumberFormatException nfe){ //find為操作符</p><p> if(compare(((OPTR.peek()).charAt(0)),find.charAt(0))==-1){</p><p> OPTR.push(find);</p><p><b>
83、 }</b></p><p><b> else {</b></p><p> while(compare(((OPTR.peek()).charAt(0)),find.charAt(0))==1){</p><p> op2=OPNT.pop();</p><p> op1=OPNT.pop()
84、;</p><p> op3=(OPTR.pop()).charAt(0);</p><p> OPNT.push(oprate(op1,op3,op2));</p><p><b> }</b></p><p> if(compare(((OPTR.peek()).charAt(0)),find.charAt(
85、0))==0){</p><p> OPTR.pop();</p><p><b> continue;</b></p><p><b> }</b></p><p> OPTR.push(find);</p><p> if(compare(((OPTR.pe
86、ek()).charAt(0)),find.charAt(0))==2){</p><p> if(OPNT.isEmpty()){</p><p> while(!OPNT.isEmpty()){</p><p> OPTR.pop();</p><p><b> }</b></p><p&
87、gt; OPTR.push("#");</p><p><b> return 0;</b></p><p><b> }</b></p><p> return OPNT.pop();</p><p><b> } </b></
88、p><p> if(compare(((OPTR.peek()).charAt(0)),find.charAt(0))==3)</p><p> return 0; </p><p><b> }</b></p><p><b> }</b></p><
89、p><b> }</b></p><p> return 0.0; </p><p><b> }</b></p><p> public int compare(char ch1,char ch2){//1值為ch1大于ch2;-1為ch1小于ch2;0為ch1等于ch2</p><
90、p> switch(ch1){</p><p> case '+':if(ch2=='+'||ch2=='-'||ch2=='#')</p><p> return 1; </p><p> else return -1;</p><p> ca
91、se '-':if(ch2=='+'||ch2=='-'||ch2=='#')</p><p><b> return 1;</b></p><p> else return -1;</p><p> case '*':return 1;</p>
92、<p> case '/':if(ch2=='(')</p><p> return -1;</p><p> else return 1;</p><p> case '#':if(ch2=='#')</p><p><b> return 2;
93、</b></p><p> else return -1;</p><p> default :return 3; </p><p><b> }</b></p><p><b> } </b></p><p> public double op
94、rate(double a,char b,double ce){</p><p> if(b=='+')</p><p> return a+ce;</p><p> else if(b=='-')</p><p> return a-ce;</p><p> else if(
95、b=='*')</p><p> return a*ce;</p><p> else return a/ce;</p><p><b> } </b></p><p><b> } </b></p><p><b> }&l
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)算器java課程設(shè)計(jì)--簡(jiǎn)單計(jì)算器
- java課程設(shè)計(jì)---計(jì)算器
- java課程設(shè)計(jì)—計(jì)算器
- java課程設(shè)計(jì)計(jì)算器
- java計(jì)算器課程設(shè)計(jì)
- java課程設(shè)計(jì)--計(jì)算器
- java課程設(shè)計(jì)計(jì)算器
- java_計(jì)算器課程設(shè)計(jì)
- java課程設(shè)計(jì)-計(jì)算器系統(tǒng)
- java課程設(shè)計(jì)---科學(xué)計(jì)算器
- java課程設(shè)計(jì)報(bào)告—計(jì)算器
- java課程設(shè)計(jì)----簡(jiǎn)易計(jì)算器
- java實(shí)現(xiàn)計(jì)算器課程設(shè)計(jì)
- java課程設(shè)計(jì)-計(jì)算器系統(tǒng)
- java計(jì)算器課程設(shè)計(jì)報(bào)告
- java計(jì)算器課程設(shè)計(jì)報(bào)告---模擬科學(xué)計(jì)算器
- java計(jì)算器課程設(shè)計(jì)---計(jì)算器模擬程序
- java課程設(shè)計(jì)報(bào)告--計(jì)算器設(shè)計(jì)
- java計(jì)算器課程設(shè)計(jì)-- 計(jì)算器的設(shè)計(jì)與實(shí)現(xiàn)
- java課程設(shè)計(jì)模擬科學(xué)計(jì)算器
評(píng)論
0/150
提交評(píng)論