java程序设计一个计算器

 

  1. 定义Java类,该类名为SimpleCalculator,用于创建图形用户界面(GUI)中的窗口。

public class SimpleCalculator extends JFrame {

    private JTextField display;

    private String currentInput = "";

    private String previousInput = "";

    private String operator = "";

private boolean hasOperator = false;

(2)构造SimpleCalculator类的函数,负责初始化窗口的基本设置和界面组件。

  public SimpleCalculator() {     

        setTitle("Simple Calculator");//设置窗口名称

        setSize(600, 800);//设置窗口大小

        setLocationRelativeTo(null);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

        display = new JTextField();

        display.setHorizontalAlignment(JTextField.RIGHT); //设置水平对齐方式为右对齐,数字将从字段的右侧开始显示

        display.setEditable(false);

        add(display, BorderLayout.NORTH);

 

        JPanel panel = new JPanel();     //创建面板

        panel.setLayout(new GridLayout(5, 4));

(3)计算器按钮及加减乘除运算

   // 数字按钮

        for (int i = 0; i < 10; i++) {

            JButton button = new JButton(String.valueOf(i));

            button.addActionListener(new NumberButtonListener(i));

            panel.add(button);

        }

 

        // 运算符按钮

        String[] operators = {"+", "-", "*", "/"};

        for (String op : operators) {

            JButton button = new JButton(op);

            button.addActionListener(new OperatorButtonListener(op));

            panel.add(button);

        }

 

        // 特殊按钮

        JButton clearButton = new JButton("C");

        clearButton.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                clearDisplay();

            }

        });

        panel.add(clearButton);

 

        JButton equalsButton = new JButton("=");

        equalsButton.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                calculateResult();

            }

        });

        panel.add(equalsButton);

 

        add(panel, BorderLayout.CENTER);

    }

 

    private void clearDisplay() {

        currentInput = "";

        previousInput = "";

        operator = "";

        hasOperator = false;

        display.setText("0");

    }

 

    private void calculateResult() {

        if (!currentInput.isEmpty() && !previousInput.isEmpty() && !operator.isEmpty()) {

            double num1 = Double.parseDouble(previousInput);

            double num2 = Double.parseDouble(currentInput);

            double result = 0;

 

            switch (operator) {

                case "+":

                    result = num1 + num2;

                    break;

                case "-":

                    result = num1 - num2;

                    break;

                case "*":

                    result = num1 * num2;

                    break;

                case "/":

                    if (num2 != 0) {

                        result = num1 / num2;

                    } else {

                        display.setText("Error: Division by zero");

                        return;

                    }

                    break;

                default:

                    display.setText("Error: Invalid operator");

                    return;

            }

 

            display.setText(String.valueOf(result));

            currentInput = String.valueOf(result);

            previousInput = "";

            operator = "";

            hasOperator = false;

        } else {

            display.setText("Error: Invalid input");

        }

}

(4)设置监听器,定义了一个内部类NumberButtonListener,实现了ActionListener接口。

  private class NumberButtonListener implements ActionListener {

        private int number;

 

        public NumberButtonListener(int number) {

            this.number = number;

        }

 

        @Override

        public void actionPerformed(ActionEvent e) {

            if (currentInput.equals("0")) {

                currentInput = String.valueOf(number);

            } else {

                currentInput += number;

            }

            display.setText(currentInput);

        }

 

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class SimpleCalculator extends JFrame {
    private JTextField display;
    private String currentInput = "";
    private String previousInput = "";
    private String operator = "";
    private boolean hasOperator = false;

    public SimpleCalculator() {
        setTitle("Simple Calculator");
        setSize(600, 800);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        display = new JTextField();
        display.setHorizontalAlignment(JTextField.RIGHT);
        display.setEditable(false);
        add(display, BorderLayout.NORTH);

        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(5, 4));

        // 数字按钮
        for (int i = 0; i < 10; i++) {
            JButton button = new JButton(String.valueOf(i));
            button.addActionListener(new NumberButtonListener(i));
            panel.add(button);
        }

        // 运算符按钮
        String[] operators = {"+", "-", "*", "/"};
        for (String op : operators) {
            JButton button = new JButton(op);
            button.addActionListener(new OperatorButtonListener(op));
            panel.add(button);
        }

        // 特殊按钮
        JButton clearButton = new JButton("C");
        clearButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                clearDisplay();
            }
        });
        panel.add(clearButton);

        JButton equalsButton = new JButton("=");
        equalsButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                calculateResult();
            }
        });
        panel.add(equalsButton);

        add(panel, BorderLayout.CENTER);
    }

    private void clearDisplay() {
        currentInput = "";
        previousInput = "";
        operator = "";
        hasOperator = false;
        display.setText("0");
    }

    private void calculateResult() {
        if (!currentInput.isEmpty() && !previousInput.isEmpty() && !operator.isEmpty()) {
            double num1 = Double.parseDouble(previousInput);
            double num2 = Double.parseDouble(currentInput);
            double result = 0;

            switch (operator) {
                case "+":
                    result = num1 + num2;
                    break;
                case "-":
                    result = num1 - num2;
                    break;
                case "*":
                    result = num1 * num2;
                    break;
                case "/":
                    if (num2 != 0) {
                        result = num1 / num2;
                    } else {
                        display.setText("Error: Division by zero");
                        return;
                    }
                    break;
                default:
                    display.setText("Error: Invalid operator");
                    return;
            }

            display.setText(String.valueOf(result));
            currentInput = String.valueOf(result);
            previousInput = "";
            operator = "";
            hasOperator = false;
        } else {
            display.setText("Error: Invalid input");
        }
    }

    private class NumberButtonListener implements ActionListener {
        private int number;

        public NumberButtonListener(int number) {
            this.number = number;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            if (currentInput.equals("0")) {
                currentInput = String.valueOf(number);
            } else {
                currentInput += number;
            }
            display.setText(currentInput);
        }
    }

    private class OperatorButtonListener implements ActionListener {
        private String op;

        public OperatorButtonListener(String op) {
            this.op = op;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            if (!currentInput.isEmpty()) {
                previousInput = currentInput;
                operator = op;
                hasOperator = true;
                currentInput = "";
            }
        }
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                SimpleCalculator frame = new SimpleCalculator();
                frame.setVisible(true);
            }
        });
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值