21xrx.com
2025-04-25 21:17:33 Friday
文章检索 我的文章 写文章
Java实现计算器的详细思路与代码案例
2023-06-17 17:51:35 深夜i     15     0
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、栈、逻辑处理

  
  

评论区