java課程設(shè)計(jì)---計(jì)算器_第1頁(yè)
已閱讀1頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論