当前位置:首页 > 后端开发 > 正文

Java简易计算器如何实现?

Java计算器程序代码实现图形界面,包含数字按钮、运算符按钮及结果显示框,通过事件监听处理用户点击,利用条件判断或 switch执行加减乘除等基本运算,并处理异常情况(如除数为零),核心是界面布局与逻辑运算的结合。

Java计算器程序开发指南

实现思路

我将创建一个功能完整的Java计算器程序,包含以下核心功能:

Java简易计算器如何实现? 第1张

Java简易计算器如何实现? 第2张

  • 基本算术运算(加、减、乘、除)
  • 小数运算支持
  • 错误处理(如除数为零)
  • 用户友好的界面
  • 历史记录功能

Java计算器完整代码

import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Stack; public class JavaCalculator extends JFrame implements ActionListener { // 界面组件 private JTextField displayField; private JButton[] numberButtons; private JButton addButton, subButton, mulButton, divButton; private JButton decButton, equButton, clrButton, delButton; private JButton negButton, perButton; private JTextArea historyArea; // 计算器状态 private double currentValue = 0; private String currentOperator = ""; private boolean newInput = true; private boolean calculationPerformed = false; public JavaCalculator() { // 设置窗口属性 setTitle("Java科学计算器"); setSize(500, 600); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); setLocationRelativeTo(null); // 创建显示区域 displayField = new JTextField("0"); displayField.setFont(new Font("Arial", Font.BOLD, 36)); displayField.setHorizontalAlignment(JTextField.RIGHT); displayField.setEditable(false); displayField.setBackground(new Color(240, 240, 240)); add(displayField, BorderLayout.NORTH); // 创建历史记录区域 historyArea = new JTextArea(5, 20); historyArea.setEditable(false); historyArea.setFont(new Font("Arial", Font.PLAIN, 14)); JScrollPane historyScroll = new JScrollPane(historyArea); historyScroll.setBorder(BorderFactory.createTitledBorder("计算历史")); add(historyScroll, BorderLayout.EAST); // 创建按钮面板 JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new GridLayout(5, 4, 10, 10)); buttonPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15)); // 初始化按钮 String[] buttonLabels = { "7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+", "C", "Del", "(-)", "%" }; numberButtons = new JButton[10]; for (int i = 0; i < 10; i++) { numberButtons[i] = new JButton(String.valueOf(i)); numberButtons[i].addActionListener(this); numberButtons[i].setFont(new Font("Arial", Font.BOLD, 18)); numberButtons[i].setBackground(new Color(220, 220, 255)); } // 创建功能按钮 decButton = new JButton("."); equButton = new JButton("="); addButton = new JButton("+"); subButton = new JButton("-"); mulButton = new JButton("*"); divButton = new JButton("/"); clrButton = new JButton("C"); delButton = new JButton("Del"); negButton = new JButton("(-)"); perButton = new JButton("%"); // 添加按钮到面板 JButton[] allButtons = { numberButtons[7], numberButtons[8], numberButtons[9], divButton, numberButtons[4], numberButtons[5], numberButtons[6], mulButton, numberButtons[1], numberButtons[2], numberButtons[3], subButton, numberButtons[0], decButton, equButton, addButton, clrButton, delButton, negButton, perButton }; // 设置按钮样式和监听器 for (JButton button : allButtons) { button.addActionListener(this); button.setFont(new Font("Arial", Font.BOLD, 18)); button.setBackground(new Color(200, 230, 255)); button.setFocusPainted(false); buttonPanel.add(button); } // 特殊按钮样式 equButton.setBackground(new Color(100, 200, 100)); clrButton.setBackground(new Color(255, 150, 150)); delButton.setBackground(new Color(255, 200, 100)); add(buttonPanel, BorderLayout.CENTER); // 添加底部信息 JLabel infoLabel = new JLabel("Java计算器 | 支持基本运算、小数、负数、百分比计算"); infoLabel.setHorizontalAlignment(SwingConstants.CENTER); infoLabel.setFont(new Font("Arial", Font.PLAIN, 12)); infoLabel.setForeground(Color.GRAY); add(infoLabel, BorderLayout.SOUTH); setVisible(true); } @Override public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); // 处理数字输入 if (command.matches("[0-9]")) { handleNumberInput(Integer.parseInt(command)); return; } // 处理小数点 if (command.equals(".")) { handleDecimalPoint(); return; } // 处理运算符 if (command.matches("[+\-*/]")) { handleOperator(command); return; } // 处理等号 if (command.equals("=")) { performCalculation(); return; } // 处理清除 if (command.equals("C")) { clearCalculator(); return; } // 处理删除 if (command.equals("Del")) { deleteLastCharacter(); return; } // 处理正负号 if (command.equals("(-)")) { toggleSign(); return; } // 处理百分比 if (command.equals("%")) { handlePercentage(); return; } } private void handleNumberInput(int digit) { if (newInput || calculationPerformed) { displayField.setText(String.valueOf(digit)); newInput = false; calculationPerformed = false; } else { String currentText = displayField.getText(); if (currentText.equals("0")) { displayField.setText(String.valueOf(digit)); } else { displayField.setText(currentText + digit); } } } private void handleDecimalPoint() { if (newInput) { displayField.setText("0."); newInput = false; calculationPerformed = false; } else { String currentText = displayField.getText(); if (!currentText.contains(".")) { displayField.setText(currentText + "."); } } } private void handleOperator(String operator) { if (!newInput) { performCalculation(); } currentOperator = operator; currentValue = Double.parseDouble(displayField.getText()); newInput = true; calculationPerformed = false; } private void performCalculation() { if (currentOperator.isEmpty()) return; double secondOperand = Double.parseDouble(displayField.getText()); double result = 0; try { switch (currentOperator) { case "+": result = currentValue + secondOperand; break; case "-": result = currentValue - secondOperand; break; case "*": result = currentValue * secondOperand; break; case "/": if (secondOperand == 0) { throw new ArithmeticException("除零错误"); } result = currentValue / secondOperand; break; } // 格式化结果 String resultStr; if (result == (long) result) { resultStr = String.format("%d", (long) result); } else { resultStr = String.format("%.6f", result).replaceAll("0*$", "").replaceAll("\.$", ""); } // 更新显示 displayField.setText(resultStr); // 记录历史 String historyEntry = String.format("%.2f %s %.2f = %s", currentValue, currentOperator, secondOperand, resultStr); historyArea.append(historyEntry + "n"); // 重置状态 currentValue = result; calculationPerformed = true; newInput = true; } catch (ArithmeticException ex) { displayField.setText("错误: " + ex.getMessage()); clearCalculator(); } } private void clearCalculator() { displayField.setText("0"); currentValue = 0; currentOperator = ""; newInput = true; calculationPerformed = false; } private void deleteLastCharacter() { if (newInput) return; String currentText = displayField.getText(); if (currentText.length() > 1) { displayField.setText(currentText.substring(0, currentText.length() - 1)); } else { displayField.setText("0"); newInput = true; } } private void toggleSign() { String currentText = displayField.getText(); if (currentText.startsWith("-")) { displayField.setText(currentText.substring(1)); } else if (!currentText.equals("0")) { displayField.setText("-" + currentText); } } private void handlePercentage() { double value = Double.parseDouble(displayField.getText()); double percentage = value / 100.0; if (currentOperator.equals("+") || currentOperator.equals("-")) { percentage = currentValue * percentage; } // 格式化结果 String resultStr; if (percentage == (long) percentage) { resultStr = String.format("%d", (long) percentage); } else { resultStr = String.format("%.6f", percentage).replaceAll("0*$", "").replaceAll("\.$", ""); } displayField.setText(resultStr); newInput = true; } public static void main(String[] args) { // 使用SwingUtilities确保GUI线程安全 SwingUtilities.invokeLater(() -> { try { // 设置系统外观 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } new JavaCalculator(); }); } }

代码解析

用户界面设计

  • 使用Swing创建图形用户界面
  • 包含数字按钮(0-9)、运算符按钮(+-*/)、功能按钮(清除、删除、正负号、百分比)
  • 显示区域使用大字体,支持长数字显示
  • 右侧添加历史记录面板,保存计算历史

核心功能实现

  • 基本运算:支持加减乘除四则运算
  • 小数处理:正确处理浮点数运算
  • 错误处理:检测除数为零等错误情况
  • 连续计算:支持连续运算(如1+2+3)
  • 特殊功能
    • 清除(C):重置计算器状态
    • 删除(Del):删除最后输入的数字
    • 正负号((-)):切换当前数字的正负
    • 百分比(%):计算百分比值

实现细节

  • 使用状态变量跟踪计算器状态(currentValue, currentOperator, newInput)
  • 计算结果格式化处理,去除多余的0
  • 使用try-catch处理可能的算术异常
  • 历史记录功能保存每次计算表达式和结果

使用说明

  1. 输入第一个数字
  2. 选择运算符(+-*/)
  3. 输入第二个数字
  4. 按”=”查看结果
  5. 可继续使用运算符进行连续计算
  6. 使用”C”按钮清除当前计算
  7. 右侧面板查看计算历史

如何运行此程序

  1. 将代码保存为JavaCalculator.java
  2. 使用命令编译:javac JavaCalculator.java
  3. 运行程序:java JavaCalculator

学习价值

这个Java计算器程序展示了:

  • 面向对象编程思想
  • GUI开发技术(Swing)
  • 事件处理机制
  • 异常处理
  • 字符串和数字处理
  • 状态管理

通过分析和扩展此代码,可以学习Java核心编程概念和GUI开发技巧。

本程序参考了Oracle官方Java文档和Swing教程中的最佳实践,结合了常见的计算器实现模式,代码遵循Java命名规范,添加了详细的注释以增强可读性。

Java简易计算器如何实现? 第3张

0