如何用java做计算器
使用Java实现简单计算器
创建一个基于控制台的简单计算器,支持加减乘除基本运算。
定义主类结构
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入第一个数字:");
double num1 = scanner.nextDouble();
System.out.println("请输入运算符(+, -, *, /):");
char operator = scanner.next().charAt(0);
System.out.println("请输入第二个数字:");
double num2 = scanner.nextDouble();
double result = calculate(num1, num2, operator);
System.out.println("计算结果: " + result);
}
}
实现计算方法
public 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) {
throw new ArithmeticException("除数不能为零");
}
return num1 / num2;
default:
throw new IllegalArgumentException("无效的运算符");
}
}
实现图形界面计算器
使用Java Swing创建带界面的计算器。

创建GUI框架
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class GUICalculator extends JFrame {
private JTextField display;
private double firstNumber = 0;
private String operation = "";
public GUICalculator() {
setTitle("计算器");
setSize(300, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
display = new JTextField();
display.setEditable(false);
add(display, BorderLayout.NORTH);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(4, 4));
String[] buttons = {
"7", "8", "9", "/",
"4", "5", "6", "*",
"1", "2", "3", "-",
"0", ".", "=", "+"
};
for (String text : buttons) {
JButton button = new JButton(text);
button.addActionListener(new ButtonClickListener());
buttonPanel.add(button);
}
add(buttonPanel, BorderLayout.CENTER);
}
}
实现按钮事件处理
private class ButtonClickListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if ("0123456789.".contains(command)) {
display.setText(display.getText() + command);
} else if ("+-*/".contains(command)) {
firstNumber = Double.parseDouble(display.getText());
operation = command;
display.setText("");
} else if ("=".equals(command)) {
double secondNumber = Double.parseDouble(display.getText());
double result = 0;
switch (operation) {
case "+":
result = firstNumber + secondNumber;
break;
case "-":
result = firstNumber - secondNumber;
break;
case "*":
result = firstNumber * secondNumber;
break;
case "/":
result = firstNumber / secondNumber;
break;
}
display.setText(String.valueOf(result));
}
}
}
启动GUI计算器

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
GUICalculator calculator = new GUICalculator();
calculator.setVisible(true);
});
}
计算器功能扩展建议
增加平方根、幂运算等高级功能
case '√':
return Math.sqrt(num1);
case '^':
return Math.pow(num1, num2);
添加内存功能(M+, M-, MR, MC) 实现历史记录功能 增加科学计算模式切换 支持括号和表达式求值 添加错误处理和输入验证
测试计算器功能
编写单元测试验证计算逻辑
import org.junit.Test;
import static org.junit.Assert.*;
public class CalculatorTest {
@Test
public void testAddition() {
assertEquals(5.0, Calculator.calculate(2, 3, '+'), 0.001);
}
@Test
public void testDivision() {
assertEquals(2.5, Calculator.calculate(5, 2, '/'), 0.001);
}
@Test(expected = ArithmeticException.class)
public void testDivisionByZero() {
Calculator.calculate(5, 0, '/');
}
}
这些实现方案提供了从基础到进阶的计算器开发方法,可以根据需求选择控制台版本或图形界面版本,并逐步扩展功能。






