请各位看一下代码,我的计算器为什么只能先执行加法,不然的话会出错
```java
package 计算器;
import javax.swing.*;
import javax.swing.JTextField;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Caculater {
public JFrame frame;
public JTextField out;
private String num1="0"; //TextField
private String num2="";
private String operator="";
public Caculater()
{
frame =new JFrame("Caculater");
frame.setSize(444,444);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
//布局
out=new JTextField();
out.setHorizontalAlignment(SwingConstants.RIGHT); //数字居右显示
out.setFont(new Font("Times New Roman",Font.BOLD,50));
frame.add(out,BorderLayout.NORTH); //out 是输出框,放在北面
JPanel p1=new JPanel(); //这个是数字区
//AC区单独放置
JPanel p2=new JPanel();
p2.setBackground(Color.cyan);
p1.setBackground(Color.PINK);
frame.add(p1,BorderLayout.CENTER);
frame.add(p2,BorderLayout.SOUTH);
p1.setLayout(new GridLayout(4,4,5,5)); //行列水平竖直间距
p2.setLayout(new GridLayout(1,1,5,5));
JButton b2=new JButton("AC");
b2.setFont(new Font("Times New Roman",Font.BOLD,30));
b2.addActionListener(action());
p2.add(b2);
String [] num= { "7","8","9","/","4","5","6","X","1","2","3","-","0",".","=","+"};
for(int i=0;i<16;i++)
{
JButton b1=new JButton(num[i]);
b1.setFont(new Font("Times New Roman",Font.BOLD,30));
//加入事件
b1.addActionListener(action());
p1.add(b1);
}
frame.setVisible(true); //显示
}
public static void main(String[] args)
{
Caculater c1=new Caculater();
}
private ActionListener action()//ActionListener 来实现按钮事件的响应,
{ //当点击按钮时,对应的操作将被执行。
//action() 函数用于创建一个 ActionListener 的匿名类,
//并将其作为按钮的事件监听器。在该类中,actionPerformed 函数用于处理事件。
ActionListener action =new ActionListener() {
public void actionPerformed(ActionEvent e) {///
// TODO Auto-generated method stub
String cmd=e.getActionCommand();
if("+-X/".contains(cmd)) {
operator =cmd;//将操作符(operator)设置为该命令,然后调用caculate方法进行计算
caculate(cmd);
}
else if(cmd.equals("AC"))
{
num1 = "0";
num2 = "";
operator = "+";
out.setText(num1);
}
else if(cmd.equals("=")) {
if (num2.equals("")) {
return;
}
caculate(operator);
}
else if(cmd.equals(".")) {
if(num2.contains(".")) {
return;
}
num2=num2+cmd;
out.setText(num2);
}
else {
//num1=cmd;
num2=num2+cmd;
out.setText(num2);//点击一个数字,将该数字添加到num2中,并显示
}
}
public void caculate(String cmd)
{
double d1=Double.valueOf(num1);
double d2=0;
if(num2.equals("")) {
return;
}
d2=Double.valueOf(num2);
String result="";
switch (operator){
case "+":result=String.valueOf(d1+d2);break;
case "-":result=String.valueOf(d1-d2);break;
case "X":result=String.valueOf(d1*d2);break;
case "/":result=String.valueOf(d1/d2);break;
}
num1=result;
num2="";
out.setText(result);
}
};
return action;
}
}
```