【java版计算器源代码】在编程学习的过程中,开发一个简单的计算器是一个非常经典的练习项目。它不仅可以帮助初学者理解面向对象编程的基本概念,还能锻炼逻辑思维和界面设计能力。本文将介绍一个基于Java语言实现的简单计算器程序,适用于Windows平台,并使用Swing图形界面库进行开发。
该计算器支持基本的加减乘除运算,用户可以通过点击按钮或使用键盘输入数值和操作符。整个程序结构清晰,代码简洁,适合用于教学或个人项目参考。
以下是该计算器的核心代码结构:
1. 主类(Main):负责启动应用程序并创建窗口。
2. GUI界面(CalculatorFrame):继承自JFrame,包含所有界面元素如文本框、按钮等。
3. 事件处理(ActionHandler):处理用户的点击事件,执行相应的计算操作。
代码示例如下:
```java
import javax.swing.;
import java.awt.;
import java.awt.event.;
public class Calculator {
public static void main(String[] args) {
JFrame frame = new JFrame("Java计算器");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 400);
frame.setLayout(null);
JTextField textField = new JTextField();
textField.setBounds(20, 20, 260, 40);
frame.add(textField);
JButton[] numberButtons = new JButton[10];
for (int i = 0; i < 10; i++) {
numberButtons[i] = new JButton(String.valueOf(i));
numberButtons[i].setBounds(20 + (i % 3) 70, 80 + (i / 3) 50, 60, 40);
frame.add(numberButtons[i]);
}
JButton addButton = new JButton("+");
JButton subtractButton = new JButton("-");
JButton multiplyButton = new JButton("");
JButton divideButton = new JButton("/");
JButton equalsButton = new JButton("=");
addButton.setBounds(20, 230, 60, 40);
subtractButton.setBounds(90, 230, 60, 40);
multiplyButton.setBounds(160, 230, 60, 40);
divideButton.setBounds(20, 280, 60, 40);
equalsButton.setBounds(90, 280, 60, 40);
frame.add(addButton);
frame.add(subtractButton);
frame.add(multiplyButton);
frame.add(divideButton);
frame.add(equalsButton);
// 添加事件监听器
ActionListener actionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if (command.equals("=")) {
try {
double result = evaluate(textField.getText());
textField.setText(String.valueOf(result));
} catch (Exception ex) {
textField.setText("错误");
}
} else {
textField.setText(textField.getText() + command);
}
}
};
for (JButton button : numberButtons) {
button.addActionListener(actionListener);
}
addButton.addActionListener(actionListener);
subtractButton.addActionListener(actionListener);
multiplyButton.addActionListener(actionListener);
divideButton.addActionListener(actionListener);
equalsButton.addActionListener(actionListener);
frame.setVisible(true);
}
private static double evaluate(String expression) {
return eval(expression);
}
private static double eval(String str) {
return new Object() {
int pos = -1;
double parse() {
double result = parseExpression();
if (pos != str.length()) throw new RuntimeException("Unexpected end of expression");
return result;
}
double parseExpression() {
double result = parseTerm();
while (pos < str.length() && str.charAt(pos) == '+') {
pos++;
result += parseTerm();
}
return result;
}
double parseTerm() {
double result = parseFactor();
while (pos < str.length() && str.charAt(pos) == '') {
pos++;
result = parseFactor();
}
return result;
}
double parseFactor() {
if (str.charAt(pos) == '(') {
pos++;
double result = parseExpression();
if (str.charAt(pos) != ')') throw new RuntimeException("Missing )");
pos++;
return result;
} else if (str.charAt(pos) == '-') {
pos++;
return -parseFactor();
} else {
return parseNumber();
}
}
double parseNumber() {
StringBuilder sb = new StringBuilder();
while (pos + 1 < str.length() && Character.isDigit(str.charAt(pos + 1))) {
pos++;
sb.append(str.charAt(pos));
}
return Double.parseDouble(sb.toString());
}
}.parse();
}
}
```
这段代码实现了基本的表达式解析与计算功能,能够处理简单的数学表达式。当然,这只是一个基础版本,可以根据需要扩展更多功能,比如支持括号、指数运算、三角函数等。
总的来说,通过编写这样一个Java计算器程序,不仅能够加深对Java GUI开发的理解,也能提升自己的编程能力。希望这篇文章能为正在学习Java的朋友们提供一些启发和帮助。