Java 简易计算器实现

代码如下:

/*
 * 该程序实现了计算器工具
 * 包含有加减乘除基本运算
 * 还加入了归零、取相反数、百分号运算、删除等功能
 * 可实现多运算符连续运算、小数点规范输入
 */

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.nio.charset.Charset;
import javax.print.DocFlavor.CHAR_ARRAY;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.BadLocationException;

public class Main {

    public static void main(String[] args) {
        new Calculator();
    }

}

class Calculator{
    JFrame win = new JFrame();//程序窗体
    JTextField screen = new JTextField();//输出文本框
    String s = null;//计算器显示输出
    double res = 0;//记录当前数值
    double headnum = 0;//运算符前的数字
    boolean flag = true;//记录当前数字正负(true为正)
    String sign = null;//运算符记录容器
    boolean st = false;//用于清除运算结果,防止下次数值的输入直接输入到上次的结果之后,当输入运算符后赋值为true
    boolean docin = true;//判断当前文本框是否允许输入小数点

    public Calculator() {
        //窗体设置
        win.setTitle("Calculator");
        win.setSize(252, 375);
        win.setLayout(null);//给窗体设置布局
        win.setResizable(false);//禁止调整窗口大小
        win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭时终止应用程序

        //按钮面板
        JPanel buttJPanel = new JPanel();
        buttJPanel.setLayout(new GridLayout(5, 4));//面板设置网格布局
        buttJPanel.setBounds(0, 80, 255, 270);//设置按钮面板位置及大小
        win.add(buttJPanel);//将面板加入到窗体

        //文本框设置
        screen.setSize(252, 80);
        win.add(screen);

        //给按钮增加侦听事件
        ActionListener listener = new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                JButton b = (JButton) e.getSource();//获取当前点击的按钮
                //AC
                if(b.getText() == "AC") {
                    AC();
                }
                //+/-
                else if(b.getText() == "+/-") {
                    opp();
                }
                //%
                else if(b.getText() == "%") {
                    percent();
                }
                //除法
                else if(b.getText() == "/") {
                    div();
                }
                //乘法
                else if(b.getText() == "×") {
                    mul();
                }
                //减法
                else if(b.getText() == "-") {
                    sub();
                }
                //加法
                else if(b.getText() == "+") {
                    add();
                }
                //等于
                else if(b.getText() == "=") {
                    result();
                }
                //删除
                else if(b.getText() == "<-") {
                    del();
                }
                //输入小数点(1.文本框为空时不能输入。2.不能同时存在多个小数点)
                else if(b.getText() == ".") {
                    if(screen.getText().isEmpty()) {//防止文本框为空时,不能输入小数点
                        s = "";
                        screen.setText(s);
                    }
                    else {//文本框不为空时
                        //防止输入多个小数点
                        if(docin){
                            s = screen.getText() + b.getText();
                            screen.setText(s);
                            docin = false;
                        }
                    }
                }
                //输入数字
                else {
                    if(st) {
                        screen.setText(null);
                        st = false;
                    }
                    s = screen.getText() + b.getText();
                    res = Double.valueOf(s);
                    screen.setText(s);
                }
            }
        };

        JButton bAC = new JButton();
        bAC.setText("AC");
        bAC.addActionListener(listener);
        buttJPanel.add(bAC);

        JButton bsgin = new JButton();
        bsgin.setText("+/-");
        bsgin.addActionListener(listener);
        buttJPanel.add(bsgin);

        JButton bper = new JButton();
        bper.setText("%");
        bper.addActionListener(listener);
        buttJPanel.add(bper);

        JButton bdiv = new JButton();
        bdiv.setText("/");
        bdiv.addActionListener(listener);
        buttJPanel.add(bdiv);

        JButton button7 = new JButton();
        button7.setText("7");
        button7.addActionListener(listener);
        buttJPanel.add(button7);

        JButton button8 = new JButton();
        button8.setText("8");
        button8.addActionListener(listener);
        buttJPanel.add(button8);

        JButton button9 = new JButton();
        button9.setText("9");
        button9.addActionListener(listener);
        buttJPanel.add(button9);

        JButton bmul = new JButton();
        bmul.setText("×");
        bmul.addActionListener(listener);
        buttJPanel.add(bmul);

        JButton button4 = new JButton();
        button4.setText("4");
        button4.addActionListener(listener);
        buttJPanel.add(button4);

        JButton button5 = new JButton();
        button5.setText("5");
        button5.addActionListener(listener);
        buttJPanel.add(button5);

        JButton button6 = new JButton();
        button6.setText("6");
        button6.addActionListener(listener);
        buttJPanel.add(button6);

        JButton bsub = new JButton();
        bsub.setText("-");
        bsub.addActionListener(listener);
        buttJPanel.add(bsub);

        JButton button1 = new JButton();
        button1.setText("1");
        button1.addActionListener(listener);
        buttJPanel.add(button1);

        JButton button2 = new JButton();
        button2.setText("2");
        button2.addActionListener(listener);
        buttJPanel.add(button2);

        JButton button3 = new JButton();
        button3.setText("3");
        button3.addActionListener(listener);
        buttJPanel.add(button3);

        JButton badd = new JButton();
        badd.setText("+");
        badd.addActionListener(listener);
        buttJPanel.add(badd);

        JButton button0 = new JButton();
        button0.setText("0");
        button0.addActionListener(listener);
        buttJPanel.add(button0);

        JButton bdoc = new JButton();
        bdoc.setText(".");
        bdoc.addActionListener(listener);
        buttJPanel.add(bdoc);

        JButton bdel = new JButton();
        bdel.setText("<-");
        //bequal.setSize(63, 54);
        bdel.addActionListener(listener);
        buttJPanel.add(bdel);//将按钮加入到面板

        JButton bequal = new JButton();
        bequal.setText("=");
        //bequal.setSize(63, 54);
        bequal.addActionListener(listener);
        buttJPanel.add(bequal);//将按钮加入到面板

        win.setVisible(true);//窗体可视化

    }

    //归零方法(AC)
    public void AC() {
        s = null;
        res = 0;
        headnum = 0;
        flag = true;
        sign = null;
        st = false;
        docin = true;
        screen.setText(s);
    }

    //取相反数(+/-)
    public void opp() {
        if(flag == true) {
            s =  "-"+screen.getText();
            res = Double.valueOf(s);
            flag = false;//令当前数值为负数
        }
        else {
            s =  String.valueOf(res*(-1));
            res = Double.valueOf(s);
            flag = true;//令当前数值为正数
        }
        screen.setText(s);
    }

    //除百(%)
    public void percent() {
        res = Double.valueOf(screen.getText())/100;
        s = String.valueOf(res);
        screen.setText(s);
    }

    //加法
    public void add() {
        if(sign != null) {//执行运算操作(等于操作)
            result();
            headnum = res;
            res = 0;
            sign = "+";
        }
        else {
            sign = "+";
            s = "";
            headnum = res;
            res = 0;
            flag = true;//当前数值为正
            docin = true;
            screen.setText(s);
        }
    }

    //减法
    public void sub() {
        if(sign != null) {//执行运算操作(等于操作)
            result();
            headnum = res;
            res = 0;
            sign = "-";
        }
        else {
            sign = "-";
            s = "";
            headnum = res;
            res = 0;
            flag = true;//当前数值为正
            docin = true;
            screen.setText(s);
        }
    }

    //乘法
    public void mul() {
        if(sign != null) {//执行运算操作(等于操作)
            result();
            headnum = res;
            res = 0;
            sign = "×";
        }
        else {
            sign = "×";
            s = "";
            headnum = res;
            res = 0;
            flag = true;//当前数值为正
            docin = true;
            screen.setText(s);
        }
    }

    //除法
    public void div() {
        if(sign != null) {//执行运算操作(等于操作)
            result();
            headnum = res;
            res = 0;
            sign = "/";
        }
        else {
            sign = "/";
            s = "";//输出为空
            headnum = res;//记录运算符前一个数值
            res = 0;//运算符后的数值为0
            flag = true;//当前数值为正
            docin = true;
            screen.setText(s);
        }
    }

    //运算方法(=)
    public void result() {
        if(sign == "+") {
            res = headnum + res;//运算过程
            if(res < 0) flag = false;
        }
        if(sign == "-") {
            res = headnum - res;
            if(res < 0) flag = false;
        }
        if(sign == "×") {
            res = headnum * res;
            if(res < 0) flag = false;

        }
        if(sign == "/") {
            res = headnum / res;
            if(res < 0) flag = false;
        }
        s = String.valueOf(res);
        screen.setText(s);//显示运算结果
        sign = null;
        s = null;
        st = true;
        docin = true;
    }

    //删除
    public void del(){
        s = screen.getText();
        if(s.length() != 0) {//文本框不为空时进行删除操作
            if(s.substring(s.length()-1).equals(".")) {//如果删除小数点,将docin设为真,允许下次小数点输入
                docin = true;
            }
            s = s.substring(0, s.length()-1);//删除
            if(s.equals("")) {//删除的为最后一个数字
                res = 0;
            }
            else if(s.equals("-")) {//删除后只剩负号,文本框直接清空
                res = 0;
                s = "";
                flag = true;
            }
            else {//删除后还有数字
                res = Double.valueOf(s);
            }
        }
        screen.setText(s);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值