holyya.com
2025-09-04 22:59:50 Thursday
登录
文章检索 我的文章 写文章
Java实现计算器的详细思路与代码案例
2023-06-17 17:51:35 深夜i     --     --
Java 计算器 Swing UI 逻辑处理

文章:

计算器是我们日常生活中经常使用的工具,也是程序员学习的重要项目之一。本文将介绍如何使用Java编写一个简单的计算器,并给出详细的思路与代码案例。

一、需求分析

计算器需要具备以下功能:

1. 输入数字和运算符

2. 实现加、减、乘、除四则运算

3. 实现小数点和正负数的运算

4. 实现万能计算功能(可以进行多步运算)

二、设计思路

1. 使用Java Swing实现计算器的UI

2. 创建一个JTextField用于输入数字和运算符, 另外四个JButton用于输入加、减、乘、除运算符

3. 输入数字和小数点使用一个JButton实现,输入正负数使用另一个JButton实现

4. 实现计算器的主要逻辑,将输入的数字和运算符存储在一个字符串中进行拼接,当用户点击等号时,将字符串中的数字和运算符解析出来并进行计算。万能计算功能可以使用栈来实现。

三、代码实现

1. UI代码


public class CalculatorUI extends JFrame {

  //输入框和按钮的定义

  private JTextField inputText;

  private JButton addBtn, subBtn, mulBtn, divBtn;

  private JButton btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9;

  private JButton dotBtn, negBtn, equBtn, delBtn;

  public CalculatorUI() {

    //初始化UI组件

    inputText = new JTextField();

    addBtn = new JButton("+");

    subBtn = new JButton("-");

    mulBtn = new JButton("*");

    divBtn = new JButton("/");

    btn0 = new JButton("0");

    btn1 = new JButton("1");

    btn2 = new JButton("2");

    btn3 = new JButton("3");

    btn4 = new JButton("4");

    btn5 = new JButton("5");

    btn6 = new JButton("6");

    btn7 = new JButton("7");

    btn8 = new JButton("8");

    btn9 = new JButton("9");

    dotBtn = new JButton(".");

    negBtn = new JButton("+/-");

    equBtn = new JButton("=");

    delBtn = new JButton("Del");

    //布局UI组件

    JPanel panel = new JPanel();

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

    panel.add(btn7);

    panel.add(btn8);

    panel.add(btn9);

    panel.add(addBtn);

    panel.add(btn4);

    panel.add(btn5);

    panel.add(btn6);

    panel.add(subBtn);

    panel.add(btn1);

    panel.add(btn2);

    panel.add(btn3);

    panel.add(mulBtn);

    panel.add(negBtn);

    panel.add(btn0);

    panel.add(dotBtn);

    panel.add(divBtn);

    panel.add(equBtn);

    panel.add(delBtn);

    //添加组件到窗口

    this.add(inputText, BorderLayout.NORTH);

    this.add(panel, BorderLayout.CENTER);

    //设置窗口属性

    this.setTitle("Calculator");

    this.setSize(300, 300);

    this.setLocationRelativeTo(null);

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    this.setVisible(true);

  }

}

2. 计算逻辑代码


public class Calculator extends CalculatorUI {

  //存储输入的数字和运算符

  private String calcuStr;

  public Calculator()

    calcuStr = "";

  

  public void calculation() {

    //获取输入的数字和运算符

    String inputStr = inputText.getText();

    calcuStr += inputStr;

    //处理小数点

    if (inputStr.equals("."))

      return;

    

    //处理正负数

    if (inputStr.equals("+/-"))

      return;

    

    //处理删除操作

    if (inputStr.equals("Del")) {

      inputText.setText("");

      calcuStr = "";

      return;

    }

    //处理等号操作

    if (inputStr.equals("=")) {

      calculate();

      return;

    }

    //实现万能计算功能

    if (inputStr.equals("+") || inputStr.equals("-") || inputStr.equals("*") || inputStr.equals("/")) {

      calculate();

      calcuStr += inputStr;

      return;

    }

    //更新输入框

    inputText.setText(inputText.getText() + inputStr);

  }

  private void calculate() {

    if (calcuStr.length() == 0)

      return;

    

    String[] arr = calcuStr.split("\\+");

    Stack stack = new Stack<>();

    Stack opt = new Stack<>();

    for (String s : arr) {

      double tmp = Double.parseDouble(s);

      stack.add(tmp);

      if (!opt.isEmpty()) {

        String optTmp = opt.pop();

        if (optTmp.equals("*")) {

          double num = stack.pop() * stack.pop();

          stack.add(num);

        } else if (optTmp.equals("/")) {

          double num = stack.pop() / stack.pop();

          stack.add(num);

        } else {

          stack.add(Double.parseDouble(optTmp));

        }

      }

    }

    double result = 0.0;

    while (!stack.empty()) {

      result += stack.pop();

    }

    inputText.setText(Double.toString(result));

    calcuStr = Double.toString(result);

  }

}

四、关键词

Java、计算器、Swing、UI、栈、逻辑处理

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复