你走运了,
我大一的时候编写过一个可以连续运算的,看了一下,代码还在,分几次发给你.
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;
}
}
}