用Java编写一个计算器

引言

计算器是人们生活中经常使用的工具之一,它可以进行简单的数学计算,并且在计算过程中提供了便利的用户界面。在本文中,我们将使用Java编写一个简单的计算器,以帮助读者更好地理解计算器的工作原理和Java编程语言的使用。

计算器的基本功能

一个基本的计算器通常具有以下功能:

  1. 实现基本的四则运算(加法、减法、乘法和除法);
  2. 支持多位数的输入和计算;
  3. 具有界面,使用户能够输入算术表达式并查看计算结果。

实现思路

为了实现这个计算器,我们将采用面向对象的思想,将其分解为多个类,每个类负责完成特定的功能。下面是我们计划使用的类及其职责:

  1. Calculator类:它是整个计算器的入口类,负责接收用户输入的算术表达式,并调用其他类完成计算。
  2. Expression类:它负责将用户输入的算术表达式解析成可计算的形式,并提供方法进行计算。
  3. Operator类:它是一个枚举类,定义了四种基本运算符(加法、减法、乘法和除法)。
  4. Number类:它表示一个数字,用于保存和操作用户输入的数字。
  5. UI类:它负责与用户交互,接收用户输入和显示计算结果。

类之间的关系

erDiagram
          Calculator }|..|{ Expression : "1" - "1" 解析算术表达式
          Calculator }|..|{ UI : "1" - "1" 与用户交互
          Expression }|--|{ Operator : "1" - "n" 使用运算符
          Expression }|--|{ Number : "1" - "n" 使用数字

代码示例

Calculator类

public class Calculator {
    public static void main(String[] args) {
        // 创建UI对象
        UI ui = new UI();
        // 获取用户输入的算术表达式
        String expression = ui.getInput();
        // 创建Expression对象
        Expression exp = new Expression(expression);
        // 计算表达式结果
        double result = exp.calculate();
        // 显示计算结果
        ui.displayResult(result);
    }
}

Expression类

import java.util.ArrayList;

public class Expression {
    private String expression;
    private ArrayList<Operator> operators;
    private ArrayList<Number> numbers;

    public Expression(String expression) {
        this.expression = expression;
        operators = new ArrayList<>();
        numbers = new ArrayList<>();
        parseExpression();
    }

    private void parseExpression() {
        // 解析算术表达式,初始化operators和numbers列表
    }

    public double calculate() {
        // 根据operators和numbers列表中的值进行计算,返回计算结果
    }
}

Operator类

public enum Operator {
    ADDITION("+"),
    SUBTRACTION("-"),
    MULTIPLICATION("*"),
    DIVISION("/");

    private final String symbol;

    Operator(String symbol) {
        this.symbol = symbol;
    }

    public String getSymbol() {
        return symbol;
    }
}

Number类

public class Number {
    private double value;

    public Number(double value) {
        this.value = value;
    }

    public double getValue() {
        return value;
    }
}

UI类

import java.util.Scanner;

public class UI {
    private Scanner scanner;

    public UI() {
        scanner = new Scanner(System.in);
    }

    public String getInput() {
        System.out.print("请输入算术表达式:");
        return scanner.nextLine();
    }

    public void displayResult(double result) {
        System.out.println("计算结果是:" + result);
    }
}

序列图

sequenceDiagram
    participant 用户
    participant 计算器
    participant UI
    participant Expression
    participant Operator
    participant Number

    用户 ->> 计算器: 输入算术表达式
    计算器 ->> UI: 获取用户输入
    UI ->> 计算器: 返回用户输入的算术表达式
    计算器 ->> Expression: 创建Expression对象,并传入算术表达式