包裝測試;
導入Java . awt . *;
導入Java . awt . event . *;
導入javax . swing . *;
公共類Z擴展JFrame實現ActionListener,FocusListener {
private String[] total = { "1 "," 2 "," 3 "," 4 "," 5 "," 6 "," 7 "," 8 "," 9 "," 0 "," 0 ",", "=", "/" };//總編號組
private String[] other = { "clear "," delete " };//其他函數數組
私有String[] symbol = { "+","-"," * ","/" };//符號數組
私有字符串multinumber = "0 ",operator1 = " ",exists = " ",operator2 = null,s =
//存在多號運算符1(運算符)。
私雙d1,D2 = 0;
private int Count = 0;
JPanel jp total = new JPanel();//常規面板
JTextField jtexternal = new JTextField(" 0 ");//外部文本框
JTextField jtinside = new JTextField();//內部文本框
JPanel jptop 1 = new JPanel();//頂部面板1
JPanel jptop 2 = new JPanel();//頂部面板2
JPanel jp middle = new JPanel();//中間面板
公共Z() {
jp total . set layout(new BorderLayout());
//使用邊界布局管理器
jptop 1 . set layout(new GridLayout(2,0));
jptop 1 . add(jtexternal);
jp top 2 . set layout(new GridLayout(0,2));
for(int I = 0;我& lt其他.長度;i++) {
JButton jbi = new JButton("+other[I]);
jbi.setSize(100,10);
jp top 2 . add(jbi);
jbi . addactionlistener(this);
}
jpmiddle . set layout(new GridLayout(4,0));
for(int I = 0;我& lt總長度;i++) {
JButton jbi = new JButton("+total[I]);
jpmiddle . add(jbi);
jbi . addactionlistener(this);
}
jtexternal . addfocuslistener(this);
JT external . add(JT inside);
jtinside . addfocuslistener(this);
//上面三行代碼的作用是讓文本框不被選中。
jptop 1 . add(jptop 2);
jptotal.add(jptop1," North ");
//將jp1作為壹個整體,從頂部開始填寫jp1的內容。
jp total . add(jp middle);
add(jp total);
set visible(true);
setSize(500,500);
this . setlocationrelativeto(null);
this . setdefaultcloseoperation(EXIT _ ON _ CLOSE);
}
// ctrl+/:註釋
public void action performed(action event e)引發了算術異常{
嘗試{
string inputing = e . getactioncommand();
//表示獲取當前輸入內容。
if (inputing.equals(" . ")) {
count++;
}
exists = jtexternal . gettext();
if (operator2!= null) {
int k = 0;
for(int I = 0;我& lt符號長度;i++) {
if(operator 2 . equals(symbol[I]){
k = k+1;
}
if(inputing . equals(symbol[I]){
k = k+1;
}
if (k == 2) {
jtexternal . settext(exists . substring(0,exists . length()-1)+inputing);
operator 1 = inputing;
返回;
}
//四個運算符不能同時存在,新的輸入替換舊的。
if(operator 2 . equals(symbol[I])amp;& ampinputing.equals(" . ")) {
返回;
}
//認識到四個運算符和點不能相鄰出現(四個運算符可以出現在點之後,但不能出現在點之前)
}
}
if(exists . equals(" 0 "){
if (inputing.equals(" . ")||(輸入.等於("+")| |(輸入.等於("-")| |(輸入.等於(" * "))
| |(inputing . equals("/)){
jtexternal . settext(" 0 "+inputing);
}否則{
jtexternal.setText(輸入);
}
}否則{
jtexternal . settext(exists+inputing);
}
//實現如果0之前沒有非零數字,那麽無論輸入多少次0,都只會顯示壹個0。如果輸入其他數字,0將被替換。
if((d 1 = = 0.0 | | D2 = = 0.0)& amp;& ampinputing . equals(" = " & amp;& amp!exists.substring(0,1)。等於(" 0 "){
返回;
}
//實現如果文本框中有數字,輸入等號,它會自己打印出來。
if (inputing.equals("clear")) {
multinumber = " 0
exists =
operator 1 = " ";
jtexternal . settext(" 0 ");
operator2 = null
D2 = 0;
s =
count = 0;
d 1 = 0.0;
//實現,點擊清除,文本框清空為0,所有數據恢復到初始狀態。
} else if(inputing . equals(" delete "){
if(exists . length()& lt;= 1 | | s . equals(" = "){
jtexternal . settext(" 0 ");
multinumber = " 0
exists =
operator 1 = " ";
operator2 = null
D2 = 0;
s =
count = 0;
d 1 = 0;
//實現,按delete刪除剛才輸入的內容。如果刪除最後壹個號碼,效果與按clear相同。
}否則{
if(inputing . equals("+" | | inputing . equals("-" | | inputing . equals(" * ")| | inputing . equals("/"){
count = 1;
}
jtexternal . settext(exists . substring(0,exists . length()-1));
//存儲operator2的最後壹個值。
operator 2 = exists . substring(exists . length()-2,exists . length()-1);
/*
*如果四個運算符後面有數字,則執行。
*所以如果此時按下刪除鍵。
*刪除如果新輸入或四個操作符。
*那麽原來的四個運算符將被新輸入的運算符替換。
*/
}
} else if(!inputing . equals("+" & amp;& amp!inputing . equals("-" & amp;& amp!inputing . equals(" * ")& amp;& amp!inputing.equals("/")
& amp& amp!inputing . equals(" = "){
//判斷輸入是否為數字。
if(s . equals(" = "){
If (exists.equals("除數不能為0 ")| | New Double(exists)= = d 1){
if (inputing.equals(" . ")) {
jtexternal . settext(" 0 "+inputing);
}否則{
jtexternal.setText(輸入);
}
}
s =
}
//計算完成後,可以執行新的操作。
If (multinumber == null) {//多位數計算
multinumber =輸入;
}否則{
multinumber +=輸入;
}
d1 = new Double(多位數);
If(運算符1。equals("+"){//執行四則運算。
if (d2 == 0) {
if(operator 1 . equals(" * ")| | operator 1 . equals("/){
D2 = 1;
}
}
//實現,當四個運算符後沒有數字時,輸入等號後的結果將是符號前的結果,如果符號前只有壹個數字,則自行打印。
d 1 = d 1+D2;
} else if(operator 1 . equals("-"){
d 1 = D2-d 1;
} else if(operator 1 . equals(" *)){
d 1 = d 1 * D2;
} else if(operator 1 . equals("/"){
d 1 = D2/d 1;
}
//使用臨時變量f2實現四則運算。
operator2 =輸入;
} else if(!輸入。equals(" = "){/[四個運算符]輸入等號,繼續計算。
multinumber = " 0
operator 1 = inputing;
D2 = d 1;
operator2 =輸入;
s =
count = 0;
//實現十進制運算
} else {// is [=]得到最終結果。
jtexternal . settext("+d 1);
count = 0;
s = " =
multinumber = " 0
if(operator 2 . equals(" 0 ")& amp;& amp"/".equals(operator1)) {
operator2 = null
d 1 = 0;//用正確的值替換非法的操作值。
拋出新的arithmetic exception();//指定引發異常的條件。
//賦值計算不拋出算術異常。如果要拋出它們,必須指定再次拋出它們的條件。
}否則{
operator 1 = inputing;
operator2 = null
D2 = 0;
}//計算結果
if(inputing . equals(" = " & amp;& amp(d1 == 0.0 || d2 == 0.0)) {
返回;
}
//認識到等號不能重復輸入。
}
} catch(arithmetic exception e 1){
Jtexternal.setText ("Divider不能為0 ");
//指定引發異常內容。
}
}
公共靜態void main(String[] args) {
new Z();
}
公共void焦點增益(焦點事件e) {
JT inside . request focus();
//聚焦內部文本框,實現外部文本框的不聚焦功能。
}
公共void focusLost(FocusEvent e) {
}
}
/*
*目前沒有實現delete刪除輸入值後恢復其他值的功能,後面會改進。比如我想計算1+1,但是輸入等號的時候想改成別的。
*比如我想改成1-1,我按delete刪除1,換成1-1,結果不是0或者我改成11,結果不是65438。
*或者我輸入11的時候,不小心輸入了壹個多余的數字,然後我又做了壹次操作,結果不是我想要的。...
*/