简单计算器的设计与实现


简介

在这个数字化的时代,计算器成为了我们日常生活中不可或缺的工具之一。无论是学生进行数学计算,还是财务人员处理账目,都离不开计算器的辅助。本文将介绍一个简单的计算器应用程序的设计与实现过程,该程序使用了Java语言开发,具有基本的混合四则运算功能,并且支持负数和一些高级运算符的使用。

运行演示截图:

java模拟科学计算器图形界面 java设计计算器面板_前端

结果为-31.0       不信大家可以验证验证

逻辑实现

  • 采用事件驱动编程模型,响应用户的点击事件。
  • 使用字符串来记录输入的表达式,并在点击等号按钮时进行计算。
  • 实现一个算法来将中缀表达式转换为后缀表达式,然后对后缀表达式进行计算以得到结果。
  • 通过异常处理机制来捕获和处理可能发生的错误,如除以零等。

程序架构

该计算器程序主要由以下几个部分组成:

  1. MainFrame - 主窗体类,负责界面的显示和用户的交互。
  2. MainCalculator - 主程序入口类,用于启动计算器。
  3. Test - 测试类,用于测试程序的各个部分是否正常工作。
  4. MTool - 工具类,包含了从中缀表达式转后缀表达式,以及对后缀表达式进行计算的方法。

主窗体设计

  • 使用Swing组件构建界面,包括按钮、文本框等。
  • 设计一个简洁明了的布局,使用户能够轻松地找到并使用所需的功能。
  • 使用图标和颜色来增强视觉效果,提高用户体验

MainFrame 类

MainFrame 类继承自 JFrame,是计算器的主窗体。它包含了以下关键部分:

  • 成员变量:包括用于存储显示内容的字符串、后台处理字符串、按钮数组等。
  • 静态代码块:用于加载计算器的图标资源。
  • 构造函数:初始化窗体,设置标题、图标、默认关闭操作等,并调用绘图和事件监听的方法。
  • 绘图方法:负责绘制计算器的界面,包括数字和操作符按钮的布局。
  • 事件监听:为每个按钮添加动作监听器,当用户点击按钮时,会触发相应的操作。
  • 字符串处理:将用户的操作映射到显示字符串和后台处理字符串上,进行相应的运算逻辑处理。
  • 运算逻辑:对后台字符串进行处理,包括中缀转后缀和后缀表达式的计算。
关键代码块

以下是 MainFrame 类中的关键代码块:

// 静态代码块,加载计算器图标资源
static {
    try {
        img = ImageIO.read(new File("resource//image//apap.jpg"));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

// 构造函数,初始化计算器窗体
public MainFrame() {
    initFrame();
    redrawUI();
    ClickService();
    setVisible(true);
}

// 事件监听,响应按钮点击
private void ClickService() {
    for (JButton button : buttons) {
        button.addActionListener(e -> {
            Maping(button.getText());
        });
    }
}

// 字符串处理,处理用户输入
private void Maping(String buttontext) {
    // ... 省略部分代码 ...
    if (!"=".equals(buttontext) && !"AC".equals(buttontext)) {
        // ... 省略部分代码 ...
        MainFrame.this.jisuanString += temp;
    } else {
        // ... 省略部分代码 ...
        if ("=".equals(buttontext)) {
            Foperations(this.jisuanString);
            this.jisuanString = this.displayString;
            MainFrame.this.redrawUiP1();
        }
        if ("AC".equals(buttontext)) {
            MainFrame.this.displayString = " ";
            MainFrame.this.jisuanString = "";
            MainFrame.this.redrawUiP1();
        }
    }
}

// 运算逻辑,中缀转后缀和后缀表达式的计算
private void Foperations(String str) {
    // ... 省略部分代码 ...
    String replace = str.replace("$($$-", "$($0$-").replace("$sqrt$", "$^$0.5$").replace("$$", "$");
    // ... 省略部分代码 ...
}

工具类实现

MTool 类

MTool 类是一个工具类,它提供了两个核心方法:

  • InfixTosuFfix:将中缀表达式转换成后缀表达式。
  • FfixCalculate:对后缀表达式进行计算,并返回计算结果。
关键代码块

以下是 MTool 类中的关键代码块:

// 用于中缀表达式转后缀表达式
public static ArrayList InfixTosuFfix(String[] splitll) {
    // ... 省略部分代码 ...
    for (String s : splitll) {
        // ... 省略部分代码 ...
        if (!Nofu(s, you)) {
            arrayList.add(s);
            continue;
        }
        // ... 省略部分代码 ...
    }
    return arrayList;
}

// 用于对后缀表达式进行计算
public static String FfixCalculate(ArrayList arrayList) {
    // ... 省略部分代码 ...
    for (String s : arrayList) {
        // ... 省略部分代码 ...
        if (!Nofu(s, yuo) && stack2.size() > 1) {
            // ... 省略部分代码 ...
            fuyunsuan(stack2, s, aa, bb);
        }
    }
    return stack2.peek();
}

// 判断是否该是运算符号
public static boolean Nofu(String str, String[] strs) {
    for (String s : strs) {
        if (str.equals(s)) return false;
    }
    return true;
}

// 根据符号进行对应的运算
static private void fuyunsuan(Stack stack2, String temp, double aa, double bb) {
    switch (temp) {
        case "+":
            stack2.push(String.valueOf(bb + aa));
            break;
        // ... 省略其他运算符的代码 ...
    }
}

用户体验

该计算器程序提供了一个直观的用户界面,用户可以通过点击按钮来输入数字和运算符,并在屏幕上看到实时的计算过程。当用户点击等号按钮时,程序会显示最终的计算结果。此外,程序还提供了清空功能,方便用户重新开始新的计算。

总结

本文介绍了一个基于Java的简单计算器的设计与实现。通过这个项目,我们可以看到如何使用Java Swing库来创建用户界面,并处理用户的输入事件。同时,我们也学习了如何将中缀表达式转换为后缀表达式,并进行计算。这个项目可以作为学习Java编程和理解计算器工作原理的一个良好示例。