簡易計算器(Java實現)

2021-08-31 03:52:40 字數 2788 閱讀 4580

本文參考自侵刪。

一.ui介面的布置

窗體中放置三個jpanel面板,第乙個面板放數字與操作符元件(0-9,+ - * / . =),4*4網格布局,置於窗體中部;第二個面板放文字框,置於頂部;第三個面板放 清空 按鈕與 歷史記錄 按鈕,置於底部。

窗體為邊界布局。

按鈕上的數字/操作符使用陣列儲存,乙個for迴圈就能建立完按鈕並新增到jpanel面板中。

string butname= ;

for (int i=0;i文字框的建立

jtextfield result_jtf;

result_jtf=new jtextfield(30);

result_jtf.sethorizontalalignment(jtextfield.right);//右對齊

result_jtf.seteditable(false);//文字框禁止編輯

panel2.setlayout(new borderlayout());//邊界布局

panel2.add(result_jtf);//文字框置於panel2元件中

frame.add(panel2,borderlayout.north);//置於頂部

清空與歷史記錄 按鈕

設定了乙個hiatory陣列用於儲存記錄,僅能顯示最近五條,每次顯示一條。

count_h變數記錄按下該按鈕的次數,作為陣列的下標

jbutton ce=new jbutton("ce");

jbutton history=new jbutton("歷史記錄");

panel3.add(ce);

panel3.add(history);

frame.add(panel3, borderlayout.south);

二.新增事件***

str儲存表示式。

所有操作符的按鈕除=之外被按下時,都新增其代表操作符到str中,並且新增時在其前後加上空格,便於用split()分割成子串。

if (actionbut.equals("+")||actionbut.equals("-")||actionbut.equals("*")||actionbut.equals("/"))

數字則直接新增到str中。

str=str+actionbut;
按下=號時,對表示式求值,將結果列印到文字框中,對按下等號的次數計數,因為只顯示最近五條記錄,所以次數還要對5取模,讓它的範圍在[0,4]之間,然後把str存入到歷史記錄的陣列中,最後將str置空。

str=str+actionbut+calculate(str);//calculate()為表示式求值函式

result_jtf.settext(str);//列印到文字框中

count_equ=count_equ%5;//僅儲存最近五條記錄

history[count_equ]=str;//存到歷史記錄陣列中

count_equ++;

str=" ";

flag=0;

其中,對表示式求值,具體操作如下:

使用split()分割str,並將子串存到乙個string陣列中。(為什麼不用double而用double,當然是double有很多方法可以使用呀,比如我們等下就要用到的parsedouble(),它可以把string轉成double型別,而double雖然是個類,但可以直接與基本資料型別進行四則運算,後面就可以直接計算啦)

建立乙個棧,資料為double型的,儲存所有的數字。

由於str的初始值為" ",也不知道為什麼分割值沒把它去掉,反正它就佔據了陣列第一位的位置(也就是下標為0)。所以導致了陣列中下標為奇數的是數字,偶數是操作符。因此我們把下標為1的元素先丟進棧中。

for迴圈的i從2開始。判斷i是否為偶數,是則對該位上的操作符進行判斷。

+:直接將後一位數字(arr[i+1])入棧

-:取負後入棧

*:將棧頂元素出棧,與arr[i+1]進行乘運算後將結果入棧

/:將棧頂元素出棧,將進行除運算的結果入棧

最後將棧中的所有數字相加,把結果轉為字串形式返回,與原str一起列印到文字框中。

public string calculate(string str) 

});history.addactionlistener(new actionlistener()

});string butname= ;

for (int i=0;istack=new stack();//儲存資料

stack.push(double.parsedouble(comput[1]));

for (int i=2;iif (comput[i].equals("-"))

if (comput[i].equals("*"))

if (comput[i].equals("/"))}}

double sum=0;

while (!stack.isempty())

string result=string.valueof(sum);//轉換成字串型

return result;

}});

panel1.add(button);

} frame.add(panel2,borderlayout.north);//置於頂部

frame.add(panel1,borderlayout.center);

} public static void main (string args)

}

實現簡易計算器

python 剛學python 老師帶著寫了乙個計算器。話不多說直接上 from tkinter import 匯入模組 top tk 設定視窗物件 top.title 計算器 設定視窗標題 v strin ar 接受使用者輸入的字元 v.set 0 設定字元預設值 isopera false 是否...

計算器簡易實現

testdlg.cpp 實現檔案 include stdafx.h include include test.h include testdlg.h include afxdialogex.h ifdef debug define new debug new endif define tag add...

C 實現簡易計算器

include include include define fin cin define fo using namespace std bool isoperator char x int getpriority char x bool isbracket char x int dooperate...