JAVA程序设计高手进哪位高手帮我编
import t。*;
import t。event。*;
public class CalcAppDemo extends Frame{
private TextField t_result;
private Panel p_main; //主面板
private Panel p_num; //数字面板
private Panel p_oper; //操作符面板
private Panel p_show; //显示面板
private Button b_num[]; //数字按钮
private Button b_oper[]; //操作符面板
public CalcAppDemo(...全部
import t。*;
import t。event。*;
public class CalcAppDemo extends Frame{
private TextField t_result;
private Panel p_main; //主面板
private Panel p_num; //数字面板
private Panel p_oper; //操作符面板
private Panel p_show; //显示面板
private Button b_num[]; //数字按钮
private Button b_oper[]; //操作符面板
public CalcAppDemo(String title){
setTitle(title);
t_result = new TextField("0。
0", 21);
p_main = new Panel();
p_num = new Panel();
p_oper = new Panel();
p_show = new Panel();
p_ tLayout(new BorderLayout());
p_ tLayout(new GridLayout(4, 3, 1, 1));
p_ tLayout(new GridLayout(4, 2, 1, 1));
b_num = new Button[12];
for(int i=0; i<9; i++)
{
b_num[i] = new Button(new Integer(i+1)。
toString());
}
b_num[9] = new Button("0");
b_num[10] = new Button("cls");
b_num[11] = new Button("。
");
for(int i=0; i<12; i++)
{
p_ d(b_num[i]);
}
b_oper = new Button[8];
b_oper[0] = new Button("+");
b_oper[1] = new Button("-");
b_oper[2] = new Button("*");
b_oper[3] = new Button("/");
b_oper[4] = new Button("pow");
b_oper[5] = new Button("sqrt");
b_oper[6] = new Button("+/-");
b_oper[7] = new Button("=");
for(int i=0; i<8; i++) //
{
p_ d(b_oper[i]);
}
t_ tEditable(false);
p_ d(t_result, BorderLayout。
NORTH);
p_ d(p_show, BorderLayout。NORTH);
p_ d(p_num, BorderLayout。WEST);
p_ d(p_oper, BorderLayout。
EAST);
d(p_main, BorderLayout。CENTER);
setSize(400, 400);
setResizable(false);
pack();
dWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
System。
exit(0);
}
});
ButtonListener b1 = new ButtonListener();
for(int i=0; i<12; i++)
{
b_num[i]。
addActionListener(b1);
}
for(int i=0; i<8; i++)
{
b_oper[i]。addActionListener(b1);
}
}
class ButtonListener implements ActionListener
{
private String lastOp; //存储上一此操作符
private String strVal; //存储数字对应的字符串
private double total; //总数
private double number; //存储新输入的数
private boolean firsttime; //判断是否第一次按下的是操作符按钮
private boolean operatorPressed;//判断是否已经按过操作符按钮
ButtonListener()
{
firsttime = true;
strVal = "";
}
//事件处理器
public void actionPerformed(ActionEvent e)
{
String s = ((Button) tSource())。
getLabel()。trim();
if( Digit( arAt(0)))
{//判断是操作数还是操作符
handleNumber(s);
}
else
{
calculate(s);
}
}
//判断是一元操作符还是二元操作符,并根据操作符类型做计算
void calculate(String op)
{
operatorPressed = true;
if(firsttime&&! isUnary(op))
{
total = getNumberOnDisplay();
firsttime = false;
}
if(isUnary(op))
{
handleUnaryOp(op);
}
else if(lastOp != null)
{
handleBinaryOp(lastOp);
}
if(! isUnary(op))
{
lastOp = op;
}
}
//判断是否一元操作符
boolean isUnary(String s)
{
return s。
equals("=")
||s。equals("cls")||s。equals("sqrt")
||s。equals("+/-")||s。equals("。");
}
//处理一元操作符
void handleUnaryOp(String op)
{
if(op。
equals("+/-"))
{//
number = negate(getNumberOnDisplay() + "");
t_ tText("");
t_ tText(number + "");
return;
}else if(op。
equals("。"))
{
handleDecPoint();
return;
}else if(op。equals("sqrt"))
{
number = Math。sqrt(getNumberOnDisplay());
t_ tText("");
t_ tText(number + "");
return;
}else if(op。
equals("="))
{//
if(lastOp!= null && !isUnary(lastOp))
{
handleBinaryOp(lastOp);
}
lastOp = null;
firsttime = true;
return;
}else
{
clear();
}
}
//处理二元运算符
void handleBinaryOp(String op)
{
if(op。
equals("+"))
{
total +=number;
}else if(op。equals("-"))
{
total -=number;
}else if(op。equals("*"))
{
total *=number;
}else if(op。
equals("/"))
{
try
{
total /=number;
}catch(ArithmeticException ae){}
}else if(op。equals("pow"))
total = Math。
pow(total, number);
//t_ tText("");
lastOp = null;
// strVal = "";
number = 0;
t_ tText(total + "");
}
//该方法用于处理数字按钮
void handleNumber(String s)
{
if(!operatorPressed)
{
strVal += s;
}else
{
operatorPressed = false;
strVal = s;
}
//
number = new Double(strVal)。
doubleValue();
t_ tText("");
t_ tText(strVal);
}
//该方法用于按下"。"按钮
void handleDecPoint()
{
operatorPressed = false;
//
if( dexOf("。
")<0)
{
strVal += "。";
}
t_ tText("");
t_ tText(strVal);
}
//该方法用于将一个数求反
double negate(String s)
{
operatorPressed = false;
//如果是一个整数,去掉小数点后面的0
if(number == (int)number)
{
s = bstring(0, dexOf("。
"));
}
//如果无"-"增加在该数的前面
if( dexOf("-")<0)
{
strVal = "-" + s;
}
else
{
strVal = bstring(1);
}
return new Double(strVal)。
doubleValue();
}
//将显示框中的值转换成Double
double getNumberOnDisplay()
{
return new Double(t_ tText())。
doubleValue();
}
//清除屏幕并设置所有的标识
void clear()
{
firsttime = true;
lastOp = null;
strVal = "";
total = 0;
number = 0;
t_ tText("0");
}
}
public static void main(String[] args) {
CalcAppDemo c = new CalcAppDemo("简单的计算器程序");
tVisible(true);
}
}
参
。
收起