Java 控制台实现计算器功能

计算器是每个人在日常生活中都可能需要的一种工具。从简单的加减法到复杂的数学运算,计算器的功能几乎涵盖了所有基本的算术操作。在这篇文章中,我们将使用Java语言实现一个简单的控制台计算器,同时介绍其设计思路和实现方法。

1. 项目概述

在本项目中,我们将创建一个控制台应用程序,允许用户输入两个数字及一个运算符(如加、减、乘、除),然后返回计算结果。为了使项目结构更清晰,我们将代码分为几个模块,分别处理用户输入、计算逻辑和输出。

2. 项目结构

在开始编码之前,先设计一下项目的结构。我们可以使用甘特图来可视化项目的各个阶段和任务分配。

gantt
    title 计算器项目甘特图
    dateFormat  YYYY-MM-DD
    section 需求分析
    需求确认          :a1, 2023-10-01, 3d
    section 设计
    项目结构设计      :a2, after a1, 2d
    section 实现
    编码               :a3, after a2, 5d
    section 测试
    单元测试          :a4, after a3, 3d

3. 代码实现

3.1 主类

首先,创建一个主类 Calculator,这个类将包含一个 main 方法,用于启动程序。

import java.util.Scanner;

public class Calculator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("欢迎使用简单计算器!");
        
        while (true) {
            System.out.print("请输入第一个数字: ");
            double num1 = scanner.nextDouble();
            System.out.print("请输入运算符 (+, -, *, /): ");
            char operator = scanner.next().charAt(0);
            System.out.print("请输入第二个数字: ");
            double num2 = scanner.nextDouble();

            double result = calculate(num1, num2, operator);
            System.out.println("结果: " + result);

            System.out.print("是否继续计算? (yes/no): ");
            String choice = scanner.next();
            if (!choice.equalsIgnoreCase("yes")) {
                break;
            }
        }
        scanner.close();
    }

    private static double calculate(double num1, double num2, char operator) {
        switch (operator) {
            case '+':
                return num1 + num2;
            case '-':
                return num1 - num2;
            case '*':
                return num1 * num2;
            case '/':
                if (num2 != 0) {
                    return num1 / num2;
                } else {
                    System.out.println("错误: 除数不能为零");
                    return 0;
                }
            default:
                System.out.println("错误: 不支持的运算符");
                return 0;
        }
    }
}

3.2 代码分析

  • 输入处理: 我们使用 Scanner 类从控制台读取用户输入。用户需要输入两个数字和一个运算符。
  • 计算功能: calculate 方法根据运算符执行相应的数学运算。对于除法,我们还处理了除数为零的情况,避免了潜在的错误。
  • 循环实现: 使用 while 循环使得用户可以连续进行多次计算,直到用户选择退出。

3.3 状态图

状态图可以有效地表示程序在不同状态下的行为。以下是计算器的状态图,用于说明程序在启动、计算和结束时的不同状态。

stateDiagram
    [*] --> Idle
    Idle --> Input: 用户开始输入
    Input --> Calculate: 用户输入完毕
    Calculate --> Output: 显示计算结果
    Output --> Idle: 用户选择继续
    Output --> [*]: 用户选择退出

4. 扩展功能

在实现了基本的计算功能后,我们可以考虑一些扩展功能,使计算器更加完善。例如,我们可以添加科学计算的功能(如三角函数、指数等)、历史记录功能、或者图形用户界面(GUI)等。

4.1 历史记录功能

我们可以使用一个列表来存储历史结果,并在每次计算后将结果加入列表中,允许用户查看过去的计算结果。以下是扩展代码的简单示例:

import java.util.ArrayList;

public class Calculator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<String> history = new ArrayList<>();
        
        System.out.println("欢迎使用简单计算器!");
        while (true) {
            // 输入和计算部分...
            String record = num1 + " " + operator + " " + num2 + " = " + result;
            history.add(record);

            // 展示历史记录
            System.out.println("历史记录: " + history);
            
            // 继续计算的选择...
        }
    }
}

5. 结论

通过本项目,我们实现了一个简单的Java控制台计算器,涵盖了基本的运算功能。在实现过程中,我们不仅练习了Java编程技能,也体会到如何设计程序结构、处理用户输入以及实现基本的逻辑控制。未来,我们可以继续扩展计算器的功能,使其更加强大和灵活。

希望这篇文章能够帮助你更好地理解计算器的实现逻辑,如果你有任何问题或想法,请随时交流!