java課程設(shè)計--實現(xiàn)計算器功能的應(yīng)用程序_第1頁
已閱讀1頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p>  學(xué)生課程設(shè)計(論文)</p><p>  題 目: 實現(xiàn)計算器功能的應(yīng)用程序 </p><p>  學(xué)生姓名: 學(xué) 號: </p><p>  所在院(系): 數(shù)學(xué)與計算機學(xué)院 </p><p>  專 業(yè): 軟件

2、工程 </p><p>  班 級: 軟件工程班 </p><p>  指 導(dǎo) 教 師: 職稱: 講師 </p><p>  2013年 6 月 20 日</p><p><b>  課程設(shè)計任務(wù)書</b>&l

3、t;/p><p>  注:任務(wù)書由指導(dǎo)教師填寫。</p><p><b>  摘 要</b></p><p>  計算器一般是指“電子計算器”,該名詞由日文傳入中國。計算器是能進行數(shù)學(xué)運算的手持機器,擁有集成電路芯片,結(jié)構(gòu)簡單,功能較弱,但由于它使用方便、操作簡單、價格低廉,因而廣泛運用于商業(yè)交易中,也是必備的辦公用品。</p>&

4、lt;p>  該程序是一個圖形界面的簡單的java計算器,使用人員能快捷簡單地進行操作。即時準(zhǔn)確地獲得需要的計算的結(jié)果,充分降低了數(shù)字計算的難度和節(jié)約了時間,對人們的生活有一定的幫助??梢赃M行簡單的四則運算(加、減、乘、除,以及求倒數(shù),求相反數(shù)),有退格功能, 歸零表示初始化,界面顏色為灰白,該程序支持鍵盤操作。</p><p>  關(guān)鍵字 計算器 ,程序,運算,操作</p><p&g

5、t;<b>  目 錄</b></p><p><b>  摘 要I</b></p><p><b>  1 緒論1</b></p><p>  1.1 課程設(shè)計的目的1</p><p>  1.2 課程設(shè)計的任務(wù)與要求1</p><p>

6、<b>  2 需求分析2</b></p><p>  2.1 功能需求2</p><p>  2.2 出錯處理2</p><p>  2.3 數(shù)據(jù)處理2</p><p>  2.4 系統(tǒng)環(huán)境要求2</p><p><b>  3 概要設(shè)計3</b></p

7、><p>  3.1 界面及功能描述3</p><p>  3.2 簡要的設(shè)計流程3</p><p><b>  4 詳細(xì)設(shè)計5</b></p><p>  4.1 計算器界面的設(shè)置5</p><p>  4.2 類層次中各個類的描述5</p><p>  5 系統(tǒng)

8、運行測試7</p><p>  5.1 初始運行界面7</p><p>  5.2 按鍵測試7</p><p>  5.3 運算符重復(fù)輸入測試7</p><p>  5.4 被除數(shù)為0的測試7</p><p>  5.5 backspace按鍵越界操作8</p><p>  5.6

9、優(yōu)先級程序計算8</p><p>  5.7 輸出測試8</p><p><b>  6 總結(jié)10</b></p><p><b>  參考文獻11</b></p><p>  附錄(源代碼)12</p><p><b>  1 緒論</b>

10、;</p><p>  1.1 課程設(shè)計的目的</p><p>  計算器在我們的生活中常常會使用到,本次課程設(shè)計,通過界面以及其中的邏輯處理,完成了四則運算的處理。通過awt包或者swing包中的界面設(shè)計部分對界面設(shè)計的細(xì)節(jié)可以有更多的了解。利用面向?qū)ο蟮乃枷?,將各個組件的事件響應(yīng)分別用不同的類表達出來。面向?qū)ο蟮乃枷霃暮艽蟪潭壬峡梢宰尦绦虻乃悸犯忧逦铱芍赜眯院芨?。對于具有相同?/p>

11、件響應(yīng)的組件則可以調(diào)用相同的類來處理事件。除此之外,利用棧的知識來解決運算符優(yōu)先的問題也讓我們對java中的棧有了更多的了解。</p><p>  1.2 課程設(shè)計的任務(wù)與要求</p><p>  a. 使用Java的awt包或Swing包的類庫設(shè)計圖形界面的計算器</p><p>  b 該計算器能夠完成加減乘除的四則混合運算(注意運算優(yōu)先級)</p>

12、;<p>  c 使用圖形界面中的事件委托機制來處理事件響應(yīng)</p><p><b>  2 需求分析</b></p><p><b>  2.1 功能需求</b></p><p>  用戶能夠完成四則混合運算+、-、*、/,并且計算器能夠自動的識別運算符的優(yōu)先級,根據(jù)輸入的運算公式,自動計算出相應(yīng)的結(jié)果

13、。同時完成計算器中的backspace、ce按鈕,能夠完成消除或者刪除的功能。</p><p><b>  2.2 出錯處理</b></p><p>  當(dāng)用戶如果按下的是除零的操作,顯示框?qū)@示“被除數(shù)不能為0”。</p><p>  當(dāng)用戶如果連續(xù)多次按下運算符,計算器自動記憶第一次運算符,并且做防連續(xù)輸入相同的運算符或者是不同的運算符。&

14、lt;/p><p>  當(dāng)用戶在同一個數(shù)據(jù)中多次輸入小數(shù)點,計算器能夠自動判斷小數(shù)點重復(fù),自動只記憶第一個小數(shù)點。</p><p>  當(dāng)用戶在同一個數(shù)據(jù)中輸入多個負(fù)號,計算器能夠自動做重復(fù)檢查,不顯示多余的負(fù)號。</p><p>  當(dāng)用戶在使用backspace功能刪除越界數(shù)據(jù)時候,計算器自動做相應(yīng)處理。</p><p><b> 

15、 2.3 數(shù)據(jù)處理</b></p><p>  在程序的起始,建立了兩個棧,分別用來存儲操作數(shù)和操作符。在計算器的核心運算代買中,運用這兩個棧來實現(xiàn)算法中的優(yōu)先級的處理,使用“#”號來標(biāo)記目標(biāo)計算公式的結(jié)束。目標(biāo)計算公式通過計算器的鍵盤實現(xiàn)輸入,當(dāng)按下“=”號之后,計算器通過調(diào)用計算器核心函數(shù)來實現(xiàn)數(shù)據(jù)的處理。</p><p>  2.4 系統(tǒng)環(huán)境要求</p>&

16、lt;p>  操作系統(tǒng):WIN XP或更高版本</p><p><b>  開發(fā)語言:java</b></p><p>  開發(fā)工具:eclipse</p><p><b>  3 概要設(shè)計</b></p><p>  3.1 界面及功能描述</p><p>  (1

17、)界面布局。創(chuàng)建一個面板,先將所有按鈕:所有數(shù)字鍵和運算符鍵等放在面板上,采用網(wǎng)格布局,具體設(shè)計為4行,4列的網(wǎng)格,十六個格子。再添加一個1行4列的網(wǎng)格布局來放置三個功能鍵:歸零,退格,輸出。然后,對以上兩個面板,采用BorderLayout布局,將按鍵面板放在計算機的中部,功能鍵面板放右上角,作為一個新的面板。最后,將文本框放在左上角,新面板放中央,采用邊界布局管理器,做為界面的整體布局,這樣界面布局就搞定了。</p>

18、<p>  (2)按退格鍵,將返回到前一次輸入狀態(tài)。</p><p>  (3)按歸零鍵,輸入的數(shù)字第一個數(shù)字為零。</p><p>  3.2 簡要的設(shè)計流程</p><p>  圖3.1 簡要的設(shè)計流程圖</p><p><b>  4 詳細(xì)設(shè)計</b></p><p>  4.1

19、 計算器界面的設(shè)置</p><p>  本程序的實現(xiàn)使用了swing和awt兩個包,主題程序界面按鍵根據(jù)微軟計算器的布置界面進行設(shè)置,采用比較人性化的常規(guī)按鍵排布。返回計算結(jié)果的“=”號鍵使用了兩倍于普通按鍵面積的設(shè)計,使的擊中的概率更加大。</p><p>  整體界面是采用了BorderLayout布局,通過4個panel進行布局的詳細(xì)劃分,panel3用來存儲位于panel4左下角的

20、GridLayout(1,2,4,4)布局,panel1、panel2、panel3分別用來表示BorderLayout的上中下三個模塊。</p><p>  Panel1中添加了一個Label display,display用來作為顯示器,實時的顯示輸入和計算的數(shù)據(jù)。其中display需要設(shè)置為右對齊和只讀屬性。</p><p>  Panel2中添加數(shù)字輸入鍵和基本操作符鍵,panel

21、采用了GridLayout布局,將整個panel2平分為4*4個空間,其中,數(shù)字鍵采用了15磅字體和藍色文字,操作符采用了15磅字體和紅色文字,是的界面更加顯眼和便于區(qū)分。</p><p>  Panel4中首先劃分為GridLayout(1,2,4,4),在Panel4中,再次使用了GridLayout(1,2,4,4)將panel4的左側(cè)一分為二,左邊為panle3,這個的基礎(chǔ)上程序往panel3中添加了ba

22、ckspace和ce兩個按鍵,在Panel4的右側(cè)單元格中添加了“=”號按鈕,這個時候的“=”號就是相當(dāng)于兩個普通按鈕的長度和大小。</p><p>  整個程序界面的設(shè)計工作基本完成。</p><p>  4.2 類層次中各個類的描述</p><p>  本次課程設(shè)計一共分為了5個類,每個類都各自完成不同的功能。</p><p>  cla

23、ss MyCalculator: 類MyCalculator是主類,含有main()函數(shù),通過new CalFrame()來運行程序。</p><p>  class CalFrame: 類CalFrame完成的功能是計算器界面的設(shè)計,并且將每個組件都添加事件響應(yīng)。具體的事件響應(yīng)操作將在其他的類中逐一實現(xiàn)。</p><p>  class HandleWin:點擊關(guān)閉windows窗口的

24、控制類。</p><p>  class HandleNum:字符串輸入控制類。</p><p>  Class HandleEqual:等號出發(fā)事件的響應(yīng)機制類。</p><p><b>  類的屬性包括:</b></p><p><b>  0-9的數(shù)字鍵</b></p><

25、p>  JButton num1; JButton num2; JButton num3; JButton num4; </p><p>  JButton num5; JButton num6; JButton num7; JButton num8; </p><p>  JButton num9; JButton num0;</p><p>  + - *

26、 / 四個控制按鈕</p><p>  JButton plus;</p><p>  JButton minus; </p><p>  JButton mutiply; </p><p>  JButton divide; </p><p>  . +/- 兩個按鈕</p><p>  JB

27、utton point; </p><p>  JButton sign;</p><p>  Backspace ce = 三個按鈕</p><p>  JButton bs;</p><p>  JButton ce;</p><p>  JButton equal;</p><p>  將

28、這些按鈕按照一定的順序添加到現(xiàn)實面板中。</p><p>  Panel p1,p2,p3,p4;</p><p>  //為了布局的方便,利用borderLayout,通過幾個面板來添加</p><p>  Stack <Double> OPNT = new Stack <Double> ();</p><p>  

29、//用來記錄操作數(shù)的棧</p><p>  Stack <String> OPTR = new Stack <String> ();</p><p>  //用來記錄操作符的棧,棧底壓入“#”,取到了“#"代表已到棧底</p><p>  boolean pointswitch = true;//小數(shù)點開關(guān)</p>&

30、lt;p>  boolean oprateswitch = false;//運算符開關(guān)</p><p>  boolean siginswitch = true;// 正負(fù)號開關(guān)</p><p><b>  方法:</b></p><p>  public void actionPerformed(ActionEvent e)</

31、p><p>  當(dāng)按下了控制按鈕,根據(jù)搜索控制開關(guān)來確定能否繼續(xù)添加,各個相應(yīng)的處理機制。</p><p>  public double segmentation(String myString)</p><p>  字符串優(yōu)先級計算代碼的核心函數(shù)。</p><p>  public int compare(char ch1,char ch2)

32、</p><p>  1值為ch1大于ch2;-1為ch1小于ch2;0為ch1等于ch2</p><p>  public double oprate(double a,char b,double ce)</p><p>  通過參數(shù)b來判斷加減乘除</p><p><b>  5 系統(tǒng)運行測試</b></p&g

33、t;<p>  5.1 初始運行界面</p><p>  圖5.1初始運行界面</p><p><b>  5.2 按鍵測試</b></p><p><b>  圖5.2 按鍵測試</b></p><p>  5.3 運算符重復(fù)輸入測試</p><p>  圖5

34、.3 運算符重復(fù)輸入測試</p><p>  5.4 被除數(shù)為0的測試</p><p>  圖5.4 被除數(shù)為0的測試</p><p>  5.5 backspace按鍵越界操作</p><p>  圖5.5 backspace按鍵越界操作</p><p>  5.6 優(yōu)先級程序計算</p><p&

35、gt;  圖5.6優(yōu)先級程序計算</p><p><b>  5.7 輸出測試</b></p><p><b>  圖5.7 輸出測試</b></p><p><b>  6 總結(jié)</b></p><p>  這個學(xué)期的java課程設(shè)計實現(xiàn)計算器功能的應(yīng)用程序?qū)ξ襾碚f是一個不

36、斷學(xué)習(xí),逐步完善的過程。開始的時候拿到題目看到只有四則混合運算就理所當(dāng)然的認(rèn)為應(yīng)該是非常簡單的的一個程序而已。</p><p>  首先開始了程序的界面的設(shè)計,并且將一些簡單的按鈕的事件響應(yīng)完成了,剩下了運算符優(yōu)先級的問題以及數(shù)據(jù)的處理問題。于是在同學(xué)的幫助下利用正則表達式來完成輸入字符串的切割,但是如果自己一個人單獨做的話,對于題目中的數(shù)據(jù)處理的問題一時不知道該如何與正則表達式連接上。最后我還是選擇用棧來處理。

37、這個過程讓我明白了學(xué)習(xí)知識的時候?qū)嵺`與理論之間是有很大的差異的。應(yīng)用能力我還有待加強。于是我開始熟悉棧的使用。在以前的學(xué)習(xí)中接觸過棧,這次的使用思想是一樣的,只需要在了解一下java 中的相關(guān)一些函數(shù)便可。但實際在寫程序的過程中,由于有一些特殊情況的考慮與進出入棧的聯(lián)系,還是碰到了一些問題。但在后來我慢慢的整理清楚思路以后,邏輯列清楚了,便將這些問題解決,逐步的將各項功能都完善。當(dāng)然目前我的計算器也只是完成了四則混合運算,實際上還應(yīng)該有

38、很多功能可以添加入計算器的。</p><p>  本次java課程設(shè)計也讓我明白只要我一步步去做,那么程序功能便會不斷強大。在以后的學(xué)習(xí)中,多加強自己的動手實踐能力。</p><p><b>  參考文獻</b></p><p>  [1] 朱福喜.《Java語言程序設(shè)計》(第二版).科學(xué)出版社</p><p>  [2

39、] 陳國君等.《Java程序設(shè)計基礎(chǔ)》(第二版).清華大學(xué)出版社</p><p>  [3] Deitel.《Java大學(xué)基礎(chǔ)教程》(第六版).電子工業(yè)出版社 </p><p>  [4] MaryCampione.《Java語言導(dǎo)學(xué)》(第四版).機械工業(yè)出版社</p><p>  [5] Y.Daniel Liang.《Java語言程序設(shè)計基礎(chǔ)篇》(第六版

40、). 機械工業(yè)出版社</p><p>  [6] Kathy Sierra.《Head First Java》(第二版).東南大學(xué)出版社</p><p>  [7] 寧書林等,《java2技能百練》,中國鐵道出版社,2004</p><p>  [8] 於東軍[等]著,《Java程序設(shè)計與應(yīng)用開發(fā)》, 清華大學(xué)出版社,2005</p><

41、p><b>  附錄(源代碼)</b></p><p>  import java.awt.*;</p><p>  import java.awt.event.*;</p><p>  import javax.swing.*;</p><p>  import java.util.*;</p>&

42、lt;p>  import java.util.regex.Matcher;</p><p>  import java.util.regex.Pattern;</p><p>  public class MyCalculator {</p><p>  public static void main(String[] args){</p>

43、<p>  new CalFrame();</p><p><b>  }</b></p><p><b>  }</b></p><p>  class CalFrame extends JFrame {</p><p>  String opnt,optr; </p>

44、<p>  Stack <Double> OPNT = new Stack <Double> ();</p><p>  Stack <String> OPTR = new Stack <String> (); </p><p>  Label display; //顯示</p><p>  JB

45、utton []num = new JButton[10];//按鍵設(shè)計</p><p>  JButton plus; JButton minus; JButton mutiply; JButton divide; </p><p>  JButton bs;JButton ce;JButton equal;</p><p>  JButton point; JB

46、utton sign;JButton lbracket; JButton rbracket;</p><p>  Panel p1,p2,p3,p4;</p><p>  String disp = "";//用戶輸入的表達式</p><p>  String result = "" ;//用戶輸入的字符串</p>

47、<p>  CalFrame(){</p><p>  OPTR.push("#");</p><p>  for(int i=0;i<=9;++i){</p><p>  num[i] = new JButton(String.valueOf(i));</p><p><b>  }<

48、/b></p><p>  plus = new JButton("+"); </p><p>  plus.setForeground(Color.red);</p><p>  plus.setFont(new Font("Dialog",1,15));</p><p>  minus = n

49、ew JButton("-");</p><p>  minus.setForeground(Color.red);</p><p>  minus.setFont(new Font("Dialog",1,15));</p><p>  mutiply = new JButton("*"); </p

50、><p>  mutiply.setForeground(Color.red);</p><p>  mutiply.setFont(new Font("Dialog",1,15));</p><p>  divide = new JButton("/"); </p><p>  divide.setFor

51、eground(Color.red);</p><p>  divide.setFont(new Font("Dialog",1,15));</p><p>  equal = new JButton("="); </p><p>  equal.setForeground(Color.red);</p><

52、;p>  equal.setFont(new Font("Dialog",1,15));</p><p>  point = new JButton(".");</p><p>  point.setFont(new Font("Dialog",1,15));</p><p>  sign = new

53、 JButton("+/-");</p><p>  sign.setFont(new Font("Dialog",1,15));</p><p>  bs = new JButton("backspace");</p><p>  bs.setForeground(Color.red);</p>

54、;<p>  bs.setFont(new Font("Dialog",1,8));</p><p>  ce = new JButton("ce");</p><p>  ce.setFont(new Font("Dialog",1,15));</p><p>  p1 = new Pan

55、el();</p><p>  p1.setLayout(new BorderLayout());</p><p>  display = new Label("0.",Label.RIGHT);</p><p>  display.setBackground(Color.white);</p><p>  p1.add(

56、display,BorderLayout.NORTH);</p><p>  p2 = new 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&g

57、t;<p>  p2.add(num[4]);p2.add(num[5]);p2.add(num[6]);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(poi

58、nt);p2.add(plus);</p><p>  p3 = new Panel(new 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

59、);</p><p>  p4.add(equal);</p><p>  setTitle("實現(xiàn)計算器功能的應(yīng)用程序");</p><p>  setLayout(new BorderLayout());</p><p>  add(p1,BorderLayout.NORTH); </p><p&g

60、t;  add(p2,BorderLayout.CENTER);</p><p>  add(p4,BorderLayout.SOUTH);</p><p>  setVisible(true);</p><p><b>  pack();</b></p><p>  setResizable(false);</p

61、><p>  setBounds(600,350,300,230);</p><p>  addWindowListener(new HandleWin());</p><p>  for(int i=0;i<=9;++i){</p><p>  num[i].setForeground(Color.blue);</p>&l

62、t;p>  num[i].setFont(new Font("Dialog",1,15));</p><p>  num[i].addActionListener(new HandleNum(this,i));</p><p><b>  }</b></p><p>  plus.addActionListener(n

63、ew HandleNum(this));</p><p>  minus.addActionListener(new HandleNum(this));</p><p>  mutiply.addActionListener(new HandleNum(this));</p><p>  divide.addActionListener(new HandleNum(

64、this));</p><p>  point.addActionListener(new HandleNum(this));</p><p>  sign.addActionListener(new HandleNum(this));</p><p>  bs.addActionListener(new HandleNum(this));</p>&

65、lt;p>  ce.addActionListener(new HandleNum(this));</p><p>  equal.addActionListener (new HandleEqual(this));</p><p><b>  } </b></p><p>  class HandleWin extends Windo

66、wAdapter{//關(guān)閉計算器</p><p>  public void windowClosing(WindowEvent e){</p><p>  (e.getWindow()).dispose();</p><p>  System.exit(0);</p><p><b>  }</b></p>

67、<p><b>  } </b></p><p>  boolean pointswitch = true;//小數(shù)點開關(guān)</p><p>  boolean oprateswitch = false;//運算符開關(guān)</p><p>  boolean siginswitch = true;// </p><

68、;p>  class HandleNum implements ActionListener{//字符串的輸入</p><p>  JFrame my_Num;</p><p>  int itemp = 0;</p><p>  HandleNum(JFrame f,int a){</p><p>  my_Num = f;</

69、p><p>  itemp = a;</p><p><b>  }</b></p><p>  HandleNum(JFrame f){</p><p>  my_Num = f;</p><p><b>  }</b></p><p>  public

70、 void actionPerformed(ActionEvent e){</p><p>  if(e.getSource()==num[itemp]){//輸入數(shù)字字符</p><p>  oprateswitch = true;</p><p>  siginswitch = false;</p><p>  disp = disp +

71、 itemp;</p><p>  display.setText(disp);</p><p><b>  }</b></p><p>  if(oprateswitch&&e.getSource()==plus){//輸入加號 </p><p>  pointswitch = true;</p&

72、gt;<p>  oprateswitch = false;</p><p>  siginswitch = true;</p><p>  disp = disp + "+";</p><p>  display.setText(disp);</p><p><b>  }</b>&l

73、t;/p><p>  if(oprateswitch&&e.getSource()==minus){//輸入減號</p><p>  pointswitch = true;</p><p>  oprateswitch = false;</p><p>  siginswitch = true;</p><p&

74、gt;  disp = disp + "-";</p><p>  display.setText(disp);</p><p><b>  }</b></p><p>  if(oprateswitch&&e.getSource()==mutiply){//輸入乘號</p><p>

75、  pointswitch = true;</p><p>  oprateswitch = false;</p><p>  siginswitch = true;</p><p>  disp = disp + "*";</p><p>  display.setText(disp);</p><p

76、><b>  }</b></p><p>  if(oprateswitch&&e.getSource()==divide){//輸入除號</p><p>  pointswitch = true;</p><p>  oprateswitch = false;</p><p>  siginswi

77、tch = true;</p><p>  disp = disp + "/";</p><p>  display.setText(disp);</p><p><b>  }</b></p><p>  if(oprateswitch&&pointswitch==true&

78、&e.getSource()==point){//輸入小數(shù)點</p><p>  pointswitch = false;</p><p>  oprateswitch = false;</p><p>  siginswitch = false;</p><p>  disp = disp + ".";</

79、p><p>  display.setText(disp);</p><p><b>  }</b></p><p>  if(siginswitch&&e.getSource()==sign){//輸入負(fù)號</p><p>  disp = disp + "—";</p>

80、<p>  display.setText(disp);</p><p><b>  }</b></p><p>  if(e.getSource()==bs){//點擊backspace</p><p>  if(!disp.isEmpty()){</p><p>  disp = disp.su

81、bstring(0,disp.length()-1);</p><p>  if(disp.isEmpty())</p><p><b>  disp=" ";</b></p><p>  display.setText(disp);</p><p><b>  }</b><

82、;/p><p><b>  }</b></p><p>  if(e.getSource()==ce){//點擊ce</p><p>  disp = " ";</p><p>  display.setText(disp);</p><p><b>  }</b&

83、gt;</p><p><b>  }</b></p><p><b>  }</b></p><p>  class HandleEqual implements ActionListener{// 等于號觸發(fā)的事件</p><p>  Frame my_Equal; </p>&

84、lt;p>  HandleEqual(JFrame f){</p><p>  my_Equal = f;</p><p><b>  }</b></p><p>  public void actionPerformed(ActionEvent e){</p><p>  if(e.getSource()==eq

85、ual){</p><p>  disp = disp+"#";</p><p>  disp = String.valueOf(segmentation(disp));</p><p>  display.setText(disp);</p><p>  disp = "";</p>&

86、lt;p>  pointswitch = true;//小數(shù)點開關(guān)</p><p>  oprateswitch = false;//運算符開關(guān)</p><p>  siginswitch = true;//符號開關(guān)</p><p><b>  }</b></p><p><b>  }</b

87、></p><p>  public double segmentation(String myString){</p><p>  String reg = "(\\—?\\d+\\.?\\d*)|([-+*/()#])"; //分割表達式.</p><p>  Pattern p = Pattern.compile(reg);<

88、/p><p>  Matcher m = p.matcher(myString);</p><p>  String find = "";</p><p>  double num = 0;</p><p>  double op1,op2;</p><p><b>  char op3;&l

89、t;/b></p><p>  while(m.find()){</p><p>  find = m.group();</p><p>  find = find.replace('—','-');</p><p><b>  try{</b></p><p&g

90、t;  num = Double.valueOf(find);</p><p>  OPNT.push(num);</p><p>  }catch(NumberFormatException nfe){ //find為操作符</p><p>  if(compare(((OPTR.peek()).charAt(0)),find.charAt(0))==-1){&

91、lt;/p><p>  OPTR.push(find);</p><p><b>  }</b></p><p><b>  else {</b></p><p>  while(compare(((OPTR.peek()).charAt(0)),find.charAt(0))==1){</p&

92、gt;<p>  op2=OPNT.pop();</p><p>  op1=OPNT.pop();</p><p>  op3=(OPTR.pop()).charAt(0);</p><p>  OPNT.push(oprate(op1,op3,op2));</p><p><b>  }</b><

93、/p><p>  if(compare(((OPTR.peek()).charAt(0)),find.charAt(0))==0){</p><p>  OPTR.pop();</p><p><b>  continue;</b></p><p><b>  }</b></p><

94、;p>  OPTR.push(find);</p><p>  if(compare(((OPTR.peek()).charAt(0)),find.charAt(0))==2){</p><p>  if(OPNT.isEmpty()){</p><p>  while(!OPNT.isEmpty()){</p><p>  OPTR

95、.pop();</p><p><b>  }</b></p><p>  OPTR.push("#");</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  re

96、turn OPNT.pop();</p><p><b>  } </b></p><p>  if(compare(((OPTR.peek()).charAt(0)),find.charAt(0))==3)</p><p>  return 0; </p><p><b>  }&

97、lt;/b></p><p><b>  }</b></p><p><b>  }</b></p><p>  return 0.0; </p><p><b>  }</b></p><p>  public int compare(cha

98、r ch1,char ch2){//1值為ch1大于ch2;-1為ch1小于ch2;0為ch1等于ch2</p><p>  switch(ch1){</p><p>  case '+':if(ch2=='+'||ch2=='-'||ch2=='#')</p><p>  return 1;

99、 </p><p>  else return -1;</p><p>  case '-':if(ch2=='+'||ch2=='-'||ch2=='#')</p><p><b>  return 1;</b></p><p>  else re

100、turn -1;</p><p>  case '*':return 1;</p><p>  case '/':if(ch2=='(')</p><p>  return -1;</p><p>  else return 1;</p><p>  case '

101、#':if(ch2=='#')</p><p><b>  return 2;</b></p><p>  else return -1;</p><p>  default :return 3; </p><p><b>  }</b></p><

102、;p><b>  } </b></p><p>  public double oprate(double a,char b,double ce){</p><p>  if(b=='+')</p><p>  return a+ce;</p><p>  else if(b=='-'

103、;)</p><p>  return a-ce;</p><p>  else if(b=='*')</p><p>  return a*ce;</p><p>  else return a/ce;</p><p><b>  } </b></p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論