本文參考自侵刪。
一.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...