/**
* 乙個計算器,與windows附件自帶計算器的標準版功能、介面相仿。 但還不支援鍵盤操作。
*/public class calculator extends jframe implements actionlistener ;
/** 計算器上的功能鍵的顯示名字 */
private final string command = ;
/** 計算器左邊的m的顯示名字 */
private final string m = ;
/** 計算器上鍵的按鈕 */
private jbutton keys = new jbutton[keys.length];
/** 計算器上的功能鍵的按鈕 */
private jbutton commands = new jbutton[command.length];
/** 計算器左邊的m的按鈕 */
private jbutton m = new jbutton[m.length];
/** 計算結果文字框 */
private jtextfield resulttext = new jtextfield("0");
// 標誌使用者按的是否是整個表示式的第乙個數字,或者是運算子後的第乙個數字
private boolean firstdigit = true;
// 計算的中間結果。
private double resultnum = 0.0;
// 當前運算的運算子
private string operator = "=";
// 操作是否合法
private boolean operatevalidflag = true;
/*** 建構函式
*/public calculator()
/*** 初始化計算器
*/private void init()
// 運算子鍵用紅色標示,其他鍵用藍色表示
keys[3].setforeground(color.red);
keys[8].setforeground(color.red);
keys[13].setforeground(color.red);
keys[18].setforeground(color.red);
keys[19].setforeground(color.red);
// 初始化功能鍵,都用紅色標示。將功能鍵放在乙個畫板內
jpanel commandspanel = new jpanel();
// 用網格布局器,1行,3列的網格,網格之間的水平方向間隔為3個象素,垂直方向間隔為3個象素
commandspanel.setlayout(new gridlayout(1, 3, 3, 3));
for (int i = 0; i < command.length; i++)
// 初始化m鍵,用紅色標示,將m鍵放在乙個畫板內
jpanel calmspanel = new jpanel();
// 用網格布局管理器,5行,1列的網格,網格之間的水平方向間隔為3個象素,垂直方向間隔為3個象素
calmspanel.setlayout(new gridlayout(5, 1, 3, 3));
for (int i = 0; i < m.length; i++)
// 下面進行計算器的整體布局,將calckeys和command畫板放在計算器的中部,
// 將文字框放在北部,將calms畫板放在計算器的西部。
// 新建乙個大的畫板,將上面建立的command和calckeys畫板放在該畫板內
jpanel panel1 = new jpanel();
// 畫板採用邊界布局管理器,畫板裡元件之間的水平和垂直方向上間隔都為3象素
panel1.setlayout(new borderlayout(3, 3));
panel1.add("north", commandspanel);
panel1.add("center", calckeyspanel);
// 建立乙個畫板放文字框
jpanel top = new jpanel();
top.setlayout(new borderlayout());
top.add("center", resulttext);
// 整體布局
getcontentpane().setlayout(new borderlayout(3, 5));
getcontentpane().add("north", top);
getcontentpane().add("center", panel1);
getcontentpane().add("west", calmspanel);
// 為各按鈕新增事件偵聽器
// 都使用同乙個事件偵聽器,即本物件。本類的宣告中有implements actionlistener
for (int i = 0; i < keys.length; i++)
for (int i = 0; i < command.length; i++)
for (int i = 0; i < m.length; i++)
}/**
* 處理事件
*/public void actionperformed(actionevent e) else if (label.equals(command[1])) else if (label.equals(command[2])) else if ("0123456789.".indexof(label) >= 0) else
}/**
* 處理backspace鍵被按下的事件
*/private void handlebackspace() else }}
/*** 處理數字鍵被按下的事件
** @param key
*/private void handlenumber(string key) else if ((key.equals(".")) && (resulttext.gettext().indexof(".") < 0)) else if (!key.equals("."))
// 以後輸入的肯定不是第乙個數字了
firstdigit = false;
}/**
* 處理c鍵被按下的事件
*/private void handlec()
/*** 處理運算子鍵被按下的事件
** @param key
*/private void handleoperator(string key) else
} else if (operator.equals("1/x")) else
} else if (operator.equals("+")) else if (operator.equals("-")) else if (operator.equals("*")) else if (operator.equals("sqrt")) else if (operator.equals("%")) else if (operator.equals("+/-")) else if (operator.equals("="))
if (operatevalidflag) else
}// 運算子等於使用者按的按鈕
operator = key;
firstdigit = true;
operatevalidflag = true;
}/**
* 從結果文字框中獲取數字
** @return
*/private double getnumberfromtext() catch (numberformatexception e)
return result;
}public static void main(string args)
}
c 語言簡單計算器原始碼
main.c 計算器 created by qianfeng on 14 7 15.iphone自帶計算器不夠好,由於你技術出眾,你被安排去開發一款ios新式計算器。專案經理認為計算器第一版要支援表示式求值,所以要求如下 輸入任意表示式 求出他的值 支援負數,不支援小數 這裡支援6種表示式 優先順序...
2的次方計算器原始碼
背景 4月份寫的,出差的時候無聊,坐車途中暈頭轉向地在草稿本上寫方案,走路時心算公式,最後還是給寫出來了!過程 核心命令 set a 命令本身有bug,只能最大輸出結果為10位的數字,相當於不能算超過2的30次方的數。對於如何解決此bug,具體還有待研究。功能 輸入端增加純數字的和超數字的判斷。亮點...
c 語言簡單計算器原始碼
main.c 計算器 created by qianfeng on 14 7 15.iphone自帶計算器不夠好,由於你技術出眾,你被安排去開發一款ios新式計算器。專案經理認為計算器第一版要支援表示式求值,所以要求如下 輸入任意表示式 求出他的值 支援負數,不支援小數 這裡支援6種表示式 優先順序...