在你提供的代码中,有以下几个问题:
按钮上的数字和符号与注释不一致。例如,按钮0上应该是数字0而非1。
除法符号应该为”/“而非”“。
计算结果可能出现精度问题,建议将计算结果保存为double类型并使用String.valueOf()方法转换为字符串后显示在文本框中。
运算过程中需要保存第一个数字、运算符和第二个数字,但代码中只定义了num1变量,并且没有用到operator变量。因此,在监听器中添加相应的逻辑来处理这些数据。
以下是修改后的代码:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Calculator {
Frame f = new Frame("计算器");
Panel p1 = new Panel();
Panel p2 = new Panel();
TextField tf = new TextField(30);
Button b0 = new Button("0");
Button b1 = new Button("1");
Button b2 = new Button("2");
Button b3 = new Button("/");
Button b4 = new Button("4");
Button b5 = new Button("5");
Button b6 = new Button("6");
Button b7 = new Button("*");
Button b8 = new Button("7");
Button b9 = new Button("8");
Button b10= new Button("9");
// 减法按钮
Button b11=
newButton("<html><font size='5'>-</font></html>");
// 清零按钮
Button b12 =
newButton("<html><font size='5'>C</font></html>");
// 加法按钮
Button b13=
newButton("<html><font size='5'>+</font></html>");
// 等于号按钮
Button b14= new Button("=");
String num1 = "";
String num2 = "";
char operator;
A aa = new A();
class A implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
String s = e.getActionCommand();
if(s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/")){ // 输入运算符
operator = s.charAt(0);
num1 = tf.getText();
tf.setText("");
}else if(s.equals("C")){ // 清零
tf.setText("");
}else if(s.equals("=")){ // 计算结果
num2 = tf.getText();
double result;
switch(operator){
case '+': result = Double.parseDouble(num1) + Double.parseDouble(num2); break;
case '-': result = Double.parseDouble(num1) - Double.parseDouble(num2); break;
case '*': result = Double.parseDouble(num1) * Double.parseDouble(num2); break;
case '/': result = Double.parseDouble(num1) / Double.parseDouble(num2); break;
default: result = 0; break;
}
// 显示结果
tf.setText(String.valueOf(result));
}else{ // 输入数字
tf.setText(tf.getText() + s);
}
}
}
void init(){
p1.add(tf);
p2.setLayout(new GridLayout(4,4,5,5));
p2.add(b7);
p2.add(b8);
p2.add(b9);
p2.add(b11); // 减法按钮
p2.add(b4);
p2.add(b5);
p2.add(b6);
p2.add(b7); // 乘法按钮
p2.add(b1);
p2.add(b2);
p2.add(b3); // 除法按钮
p2.add(bc); // 清零按钮
p2.add(b0);
p2.add(beq); // 等于号按钮
p2.add(bp); // 加法按钮
b0.addActionListener(aa);
b1.addActionListener(aa);
b2.addActionListener(aa);
b3.addActionListener(aa);
b4.addActionListener(aa);
b5.addActionListener(aa);
b6.addActionListener(aa);
b7.addActionListener(aa);
b8.addActionListener(aa);
b9.addActionListener(aa);
b11.addActionListenersaa(); // 减法按钮添加监听器
bc.addActionListenersaa(); // 清零按钮添加监听器
beq.addActionListenersaa(); // 等于号按钮添加监听器
bp.addActionListenersaa(); // 加法按钮添加监听器
f.add(p1,BorderLayout.NORTH);
f.pack();
f.setVisible(true);
}
public static void main(String[] args) {
new Calculator().init();
}
}
在此基础上,还可以进一步美化界面和优化代码。