計算器,感覺不錯

你走運了,
我大一的時候編寫過一個可以連續運算的,看了一下,代碼還在,分幾次發給你.
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
//簡單計算器 編寫:Blues 時間:2007/12月/04日 行數:93
public class Calc extends Applet implements ActionListener{
Button cmd; //按鈕
TextArea txt = new TextArea(1,15); //文本框
char[] caption ={'7','8','9','4','5','6','1','2','3','0','.','+','-','*','/','^','C','='}; //字符數組.用於存儲,設置按鈕的文字.
double x = 0, y = 0; // 用於計算結果的兩個值.
char sign = ' '; // 儲存運算符號,比如'+','-'
int iPress = 0; // 這個變量用來儲存運算符號按下了幾次.用於連加的處理.
boolean bClear = false; // 這個變量標示:是否清除文本框的內容.用於連加的處理.

public void init(){
int i,j;
Panel padTxt = new Panel(); //padTxt 放置文本框的的面板
padTxt.add(txt);
Panel padNum = new Panel(); //padNum 放置數字按鈕的面板
padNum.setLayout(new GridLayout(4,3)); //佈局爲網格佈局,4行3列
Panel padSign = new Panel(); //padSign 放置運算符號的面板
padSign.setLayout(new GridLayout(4,3));
for (i=0; i<=10; i++){ //這個循環用於放置數字0-9,小數點按鈕
cmd = new Button(""+caption[i]); //設置按鈕文字
cmd.setActionCommand(""+caption[i]); //添加事件命令.添加後,
cmd.addActionListener(this); // 若觸發事件,事件變量(ActionEvent e)可以取出這個事件命令.
padNum.add(cmd); // 也就是說,可以用不同的事件命令來區分按鈕.
}
for (j=i; j<=caption.length-1; j++){ //添加運算符按鈕
cmd = new Button(""+caption[j]);
cmd.setActionCommand(""+caption[j]);
cmd.addActionListener(this);
padSign.add(cmd);
}
add(padTxt);
add(padNum);
add(padSign);
}
回答人的補充   2009-07-09 12:17
public void actionPerformed(ActionEvent e){
String str = e.getActionCommand(); //取出事件命令
String text = txt.getText().trim();
if (text.compareTo("0")==0){ bClear = true;}

if (str.compareTo("0")>=0 && str.compareTo("9")<=0){ //如果事件命令>=0且<=9,那麼可以判斷,按下的是數字按鈕
if (bClear) { // 如果bClear = true
txt.setText(""); // 清空文本框
bClear = false; // 復位bClear
}
txt.append(str); //把事件命令添加進文本框.
}else if (str.compareTo("=")==0){ //如果事件命令是"=",則計算結果.
y = Double.parseDouble(text);
x = completeRes(x,y,sign);
txt.setText(""+ x);
sign = ' ';
bClear=true;
iPress = 0;
}else if (str.compareTo(".")==0){ //如果事件命令是"."
if (text.indexOf('.')<0 && text.length()>0){
txt.append(".");
bClear = false; // 復位bClear
}
}else if (str.compareTo("C")==0){
txt.setText("0");
x = 0; y = 0;
sign = ' ';
iPress = 0;
bClear = false;
}else{
if (bClear == false) { pressSign();}
sign=str.charAt(0);
}
}
回答人的補充   2009-07-09 12:17
	private void pressSign(){	//此過程來處理運算符被按下後的事情.
double box=Double.parseDouble(txt.getText()); //取出文本框的內容
iPress+=1; //運算符號被按下次數+1
switch (iPress){
case 1: //若第一次按下
x = box; //得到x
bClear=true; //接下來,按數字按鈕將會把文本框清空.
case 2: //若第二次按下
y = box; //得到y
x = completeRes(x,y,sign); //運算出結果,保存到x
txt.setText(""+ x); //設置文本框內容爲計算出的結果
sign = ' '; //運算符清0
bClear=true; //接下來,按數字按鈕將會把文本框清空.
iPress=1; //設置"運算符號被按下次數"爲1 (爲了連加.因爲連加的話,再按下運算符就應該取出y,而不是x)
}
}

private double completeRes(double a,double b,char sign){ //此過程用於計算結果,不必多說
switch(sign){
case '+':
return a+b;
case '-':
return a-b;
case '*':
return a*b;
case '/':
return a/b;
case '^'://乘方
return Math.pow(a, b);
default: //如果沒有運算符,那麼就不執行操作,返回b(請結合上面的程序,思考爲什麼)
return b;
}
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章