用java写的一个计算器,不知道为什么只能运算加法、乘法和几次方,每次点击减法和除法按钮的时候就变成了乘法,有没有大神可以帮我看看

package CalcDemo;

import javax.swing.;
import java.awt.
;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.StringBufferInputStream;
import java.math.BigDecimal;
import java.math.BigInteger;

class caculate extends JFrame {
private String number;//储存输入数值
private JTextField jx;//输入文本框
private String a;//储存前一个数
private String b;//储存后一个数
private final String Add = “+”;//加
private final String Min = “-”;//减
private final String Multi = “*”;//乘
private final String Div = “/”;//除
private String abs;//存储运算符号
private String result;//存储结果
private BigDecimal b1;
private BigDecimal b2;
private int pone;
private BigInteger number1;
private Clipboard clipboard;

//为初始状态赋值
public caculate() {
    number = "";
    result = "";
    a = "";
    b = "";
    pone = 0;
    clipboard = this.getToolkit().getSystemClipboard();
    Initi();
}

//初始化窗口
private void Initi() {
    this.setTitle("计算器");
    this.setBounds(300, 300, 400, 400);
    this.setLayout(null);
    creatUI();
    this.setVisible(true);
    this.setResizable(false);
    this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}


private void creatUI() {
    addMean();
    addText();
    addNumber();
    addOther();
}

private void addMean() {
    JMenuBar bar = new JMenuBar();
    this.setJMenuBar(bar);
    JMenu help = new JMenu("Edit(E)");
    bar.add(help);
    JMenuItem item = new JMenuItem("Copy(C)");
    help.add(item);

    item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.VK_CLEAR));
    //键盘敲击事件
    item.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            String text = jx.getText();//抓取文本框内的输入字体
            StringSelection stringSelection = new StringSelection(text);
            clipboard.setContents(stringSelection, null);
        }
    });
}

/*
 * 输入文本
 */

private void addText() {
    jx = new JTextField();
    jx.setBounds(10, 10, 380, 28);
    jx.setFont(new Font("Dialog", 0, 16));
    jx.setBorder(BorderFactory.createEtchedBorder(Color.lightGray, Color.gray));
    jx.addKeyListener(new KeyListener() {
        @Override
        public void keyTyped(KeyEvent e) {
            if ((e.getKeyChar() >= '0' && e.getKeyChar() <= '9') || e.getKeyChar() == '.') {
                if (jx == null && e.getKeyChar() == '.') {
                    e.consume();
                } else {

                }
                String str = Character.toString(e.getKeyChar());
                setNumber(str);
            } else {
                e.consume();
            }
            if (e.getKeyChar() == '+') {
                setMethod(Add);
            }
            if (e.getKeyChar() == '-') {
                setMethod(Min);
            }
            if (e.getKeyChar() == '*') {
                setMethod(Multi);
            }
            if (e.getKeyChar() == '/') {
                setMethod(Div);
            }
            if (e.getKeyChar() == KeyEvent.VK_ENTER) {
                Cacualte();
                display();
            }
            if (e.getKeyChar() == KeyEvent.VK_BACK_SPACE) {
                number = jx.getText();
            }
        }

        @Override
        public void keyPressed(KeyEvent e) {

        }

        @Override
        public void keyReleased(KeyEvent e) {

        }
    });
    this.add(jx);
}


public void setNumber(String number)
{
    this.number += number;
}

//设置运算规则
public void setMethod(String method) {
    if (result == "" && a == "") {
        //不以上次结果进行二次运算
        a = jx.getText();
    }
    if (result != "") {
        //以上次结果进行再次计算
        a = result;
        if (a != jx.getText()) {
            a = jx.getText();
        }
        result = "";
    }
    abs = method;
    number = "";
    jx.setText(number);
}


//删除
public void delete()
{
    if (number.length() != 0) {
        number = number.substring(0, number.length() - 1);
    }
}


//键盘布局
private void addNumber()
{
    JButton button7 = new JButton("7");
    button7.setBounds(10, 45, 70, 70);
    this.add(button7);
    button7.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            setNumber("7");
            jx.setText(number);
        }
    });
    JButton button8 = new JButton("8");
    button8.setBounds(90, 45, 70, 70);
    this.add(button8);
    button8.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            setNumber("8");
            jx.setText(number);
        }
    });
    JButton button9 = new JButton("9");
    button9.setBounds(170, 45, 70, 70);
    this.add(button9);
    button9.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            setNumber("9");
            jx.setText(number);
        }
    });
    JButton button4 = new JButton("4");
    button4.setBounds(10, 125, 70, 70);
    this.add(button4);
    button4.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            setNumber("4");
            jx.setText(number);
        }
    });
    JButton button5 = new JButton("5");
    button5.setBounds(90, 125, 70, 70);
    this.add(button5);
    button5.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            setNumber("5");
            jx.setText(number);
        }
    });
    JButton button6 = new JButton("6");
    button6.setBounds(170, 125, 70, 70);
    this.add(button6);
    button6.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            setNumber("6");
            jx.setText(number);
        }
    });
    JButton button1 = new JButton("1");
    button1.setBounds(10, 205, 70, 70);
    this.add(button1);
    button1.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            setNumber("1");
            jx.setText(number);
        }
    });
    JButton button2 = new JButton("2");
    button2.setBounds(90, 205, 70, 70);
    this.add(button2);
    button2.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            setNumber("2");
            jx.setText(number);
        }
    });
    JButton button3 = new JButton("3");
    button3.setBounds(170, 205, 70, 70);
    this.add(button3);
    button3.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            setNumber("3");
            jx.setText(number);
        }
    });
    JButton button0 = new JButton("0");
    button0.setBounds(170, 285, 70, 70);
    this.add(button0);
    button0.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            setNumber("0");
            jx.setText(number);
        }
    });

}


/*
 * 添加其他和运算按钮
 * */
private void addOther() {
    JButton Ec = new JButton("MC");//存储显示栏中的数字
    Ec.setBounds(250, 45, 70, 70);
    this.add(Ec);
    Ec.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            jx.setText("0");//初始化文本
            number = "";
            a = "";
            b = "";
            result = "";
        }
    });
    JButton buttondeAll = new JButton("Delete");//删除键
    buttondeAll.setBounds(320, 45, 70, 70);
    this.add(buttondeAll);
    buttondeAll.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            delete();
            jx.setText(number);
        }
    });
    JButton min = new JButton(Min);
    min.setBounds(320, 125, 70, 70);
    this.add(min);
    min.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            setMethod(Min);
        }
    });
    JButton add = new JButton(Add);
    add.setBounds(250, 125, 70, 70);
    this.add(add);
    add.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            setMethod(Add);
        }
    });
    JButton multi = new JButton(Multi);
    multi.setBounds(250, 205, 70, 70);
    this.add(multi);
    multi.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            setMethod(Multi);
        }
    });
    JButton div = new JButton(Div);
    div.setBounds(320, 205, 70, 70);
    this.add(div);
    div.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            setMethod(Div);
        }
    });
    JButton equals = new JButton("=");
    equals.setBounds(250, 285, 140, 70);
    this.add(equals);
    equals.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            Cacualte();
            display();
        }
    });
    JButton point = new JButton(".");
    point.setBounds(10, 285, 70, 70);
    this.add(point);
    point.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            if (!jx.getText().contains(".")) {
                if (jx.getText().length() != 0) {
                    //在没有数字的时候输入小数点无效
                    setNumber(".");
                    jx.setText(number);
                }
            }
        }
    });
    JButton pow = new JButton("pow");
    pow.setBounds(90, 285, 70, 70);
    this.add(pow);
    pow.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            setMethod("pow");
        }
    });
    jx.getCaret().setVisible(true);
}

//计算函数
public void Cacualte() {
    if (jx.getText() == null) {
        result = null;
    } else {
        b = jx.getText();
        if (abs != "pow") {
            if (a.length() != 0 && b.length() != 0) {
                b1 = new BigDecimal(a);
                b2 = new BigDecimal(b);
                if (abs.equals(Add)) {
                    result = b1.add(b2).toString();
                } else if (abs.equals(Multi)) {
                    result = (b1.multiply(b2).toString());
                } else if (abs.equals(Min)) {
                    result = (b1.multiply(b2).toString());
                } else if (abs.equals(Div)) {
                    result = (b1.multiply(b2).toString());
                }
            }
        } else {
            if (a.contains(".") || b.contains(".")) {
                number = "";
                a = "";
                b = "";

                JOptionPane.showConfirmDialog(null, "输入错误!", "ERROR", JOptionPane.CLOSED_OPTION);
                jx.setText("");
            } else {
                number1 = new BigInteger(a);
                pone = Integer.valueOf(b);
                result = number1.pow(pone).toString();
            }
        }
        number = "";
    }
}

//显示函数
public void display() {
    if (result != "") {
        jx.setText(result);
    } else if (b == "") {
        jx.setText(a);
    } else {
        jx.setText(b);
    }
}

}

public class CalcDemo {
    public static void main(String[] args)
    {
        new caculate();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值