LIliYR 2023-04-15 11:57 采纳率: 0%
浏览 9

关于#java#的问题:我的计算器为什么只能先执行加法

请各位看一下代码,我的计算器为什么只能先执行加法,不然的话会出错


```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;
    }
    
}

```

  • 写回答

1条回答 默认 最新

报告相同问题?

问题事件

  • 创建了问题 4月15日

悬赏问题

  • ¥20 公众号如何实现点击超链接后自动发送文字
  • ¥15 用php隐藏类名和增加类名
  • ¥15 算法设计与分析课程的提问
  • ¥20 汇川小型plc控制小米微电机
  • ¥15 用MATLAB汇总拟合图
  • ¥15 智能除草机器人方案设计
  • ¥15 对接wps协作接口实现消息发送
  • ¥15 SQLite 出现“Database is locked” 如何解决?
  • ¥15 已经加了学校的隶属邮箱了,为什么还是进不去github education?😭
  • ¥15 求会做聚类,TCN的朋友有偿线上指导。以下是目前遇到的问题