简单计算器的设计与实现
简介
在这个数字化的时代,计算器成为了我们日常生活中不可或缺的工具之一。无论是学生进行数学计算,还是财务人员处理账目,都离不开计算器的辅助。本文将介绍一个简单的计算器应用程序的设计与实现过程,该程序使用了Java语言开发,具有基本的混合四则运算功能,并且支持负数和一些高级运算符的使用。
运行演示截图:
结果为-31.0 不信大家可以验证验证
逻辑实现
- 采用事件驱动编程模型,响应用户的点击事件。
- 使用字符串来记录输入的表达式,并在点击等号按钮时进行计算。
- 实现一个算法来将中缀表达式转换为后缀表达式,然后对后缀表达式进行计算以得到结果。
- 通过异常处理机制来捕获和处理可能发生的错误,如除以零等。
程序架构
该计算器程序主要由以下几个部分组成:
- MainFrame - 主窗体类,负责界面的显示和用户的交互。
- MainCalculator - 主程序入口类,用于启动计算器。
- Test - 测试类,用于测试程序的各个部分是否正常工作。
- 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编程和理解计算器工作原理的一个良好示例。