用java写一个计算器,提供代码
时间: 2024-03-23 11:35:57 浏览: 16
好的,下面是一个简单的基于 Java 的计算器示例代码,使用了 Swing GUI 框架和简单的解析器技术。
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Calculator extends JFrame implements ActionListener {
// 创建 UI 组件
private JTextField inputField;
private JButton[] buttons;
private String[] buttonLabels = { "C", "CE", "<-", "/", "7", "8", "9", "*", "4", "5", "6", "-", "1", "2", "3",
"+", "0", ".", "=" };
private String input = "";
public Calculator() {
// 设置窗口标题
setTitle("Calculator");
// 创建 UI 组件
inputField = new JTextField(20);
inputField.setEditable(false);
inputField.setHorizontalAlignment(JTextField.RIGHT);
buttons = new JButton[buttonLabels.length];
for (int i = 0; i < buttonLabels.length; i++) {
buttons[i] = new JButton(buttonLabels[i]);
buttons[i].setPreferredSize(new Dimension(50, 50));
buttons[i].addActionListener(this);
}
// 创建面板并添加 UI 组件
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(5, 4, 5, 5));
panel.add(inputField);
for (int i = 0; i < buttonLabels.length; i++) {
panel.add(buttons[i]);
}
// 添加面板到窗口
add(panel);
// 设置窗口大小并显示窗口
setSize(300, 300);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
// 获取按钮上的标签
String label = e.getActionCommand();
// 处理不同的按钮事件
switch (label) {
case "C":
input = "";
break;
case "CE":
input = "";
inputField.setText("");
break;
case "<-":
if (input.length() > 0) {
input = input.substring(0, input.length() - 1);
}
break;
case "=":
if (input.length() > 0) {
try {
input = Double.toString(parseExpression(input));
} catch (Exception ex) {
input = "Error";
}
}
break;
default:
input += label;
break;
}
// 更新输入框
inputField.setText(input);
}
private double parseExpression(String expression) throws Exception {
// 分割表达式
String[] tokens = expression.split("(?<=[-+*/])|(?=[-+*/])");
// 计算表达式
double result = Double.parseDouble(tokens[0]);
for (int i = 1; i < tokens.length; i += 2) {
String operator = tokens[i];
double operand = Double.parseDouble(tokens[i + 1]);
switch (operator) {
case "+":
result += operand;
break;
case "-":
result -= operand;
break;
case "*":
result *= operand;
break;
case "/":
if (operand == 0) {
throw new Exception("Division by zero");
}
result /= operand;
break;
}
}
return result;
}
public static void main(String[] args) {
Calculator calculator = new Calculator();
}
}
```
该示例代码包含一个 `Calculator` 类,继承自 `JFrame` 类,并实现了 `ActionListener` 接口。它创建了一个计算器的 UI,包括一个文本框和一些按钮,然后处理按钮事件并计算表达式。解析器仅支持基本的加、减、乘、除和小数点运算,不支持括号和复杂表达式。