Java编写简单计算器的完整实现过程

让我来详细讲解一下“Java编写简单计算器的完整实现过程”的攻略。

1. 编写UI界面

首先,我们需要用Java编写一个简单的UI界面,作为计算器的操作界面。可以使用Swing或JavaFX等框架。

以下是一个使用Swing框架实现的示例代码:

import javax.swing.*;
import java.awt.*;

public class CalculatorUI extends JFrame {

    private JTextField textField;
    private JButton[] btns;

    public CalculatorUI() {
        setTitle("Calculator");

        // 创建文本框,并设置不可编辑
        textField = new JTextField("0");
        textField.setEditable(false);
        textField.setHorizontalAlignment(JTextField.RIGHT);

        // 创建数字按钮
        String[] buttonTexts = {"7", "8", "9", "4", "5", "6", "1", "2", "3", "0", ".", "="};
        btns = new JButton[buttonTexts.length];
        for (int i = 0; i < buttonTexts.length; i++) {
            btns[i] = new JButton(buttonTexts[i]);
        }

        // 设置数字按钮的布局
        // 注意:这里使用了网格布局
        JPanel btnPanel = new JPanel(new GridLayout(4, 3));
        for (JButton btn : btns) {
            btnPanel.add(btn);
        }

        // 将文本框和数字按钮添加到窗口
        Container contentPane = getContentPane();
        contentPane.add(textField, BorderLayout.NORTH);
        contentPane.add(btnPanel, BorderLayout.CENTER);

        pack();
        setLocationRelativeTo(null);
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public JTextField getTextField() {
        return textField;
    }

    public JButton[] getBtns() {
        return btns;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            new CalculatorUI().setVisible(true);
        });
    }
}

2. 实现计算器逻辑

接下来,我们需要实现计算器的逻辑,在用户输入数字和运算符后,计算并输出结果。

以下是一个简单的计算器逻辑实现示例:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class CalculatorLogic implements ActionListener {

    private CalculatorUI ui;
    private String operator = "";
    private double num1 = 0;
    private double num2 = 0;
    private boolean isFirstInput = true;
    private boolean hasDot = false;

    public CalculatorLogic(CalculatorUI ui) {
        this.ui = ui;
        for (JButton btn : ui.getBtns()) {
            btn.addActionListener(this);
        }
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        String text = ui.getTextField().getText();
        String cmd = e.getActionCommand();
        boolean isNumber = false;
        try {
            Double.parseDouble(cmd);
            isNumber = true;
        } catch (NumberFormatException ex) {

        }

        if (isNumber) {
            if (isFirstInput) {
                if (cmd.equals(".")) {
                    ui.getTextField().setText("0" + cmd);
                    hasDot = true;
                } else {
                    ui.getTextField().setText(cmd);
                }
                isFirstInput = false;
            } else {
                if (cmd.equals(".")) {
                    if (!hasDot) {
                        ui.getTextField().setText(text + cmd);
                        hasDot = true;
                    }
                } else {
                    ui.getTextField().setText(text + cmd);
                }
            }
        } else {
            if (cmd.equals("=")) {
                num2 = Double.parseDouble(text);
                double result = calculate();
                ui.getTextField().setText(String.valueOf(result));
                num1 = 0;
                num2 = 0;
                operator = "";
                isFirstInput = true;
                hasDot = false;
            } else {
                if (num1 == 0) {
                    num1 = Double.parseDouble(text);
                    operator = cmd;
                    isFirstInput = true;
                    hasDot = false;
                } else {
                    num2 = Double.parseDouble(text);
                    double result = calculate();
                    num1 = result;
                    operator = cmd;
                    isFirstInput = true;
                    hasDot = false;
                    ui.getTextField().setText(String.valueOf(result));
                }
            }
        }
    }

    private double calculate() {
        switch (operator) {
            case "+":
                return num1 + num2;
            case "-":
                return num1 - num2;
            case "*":
                return num1 * num2;
            case "/":
                return num1 / num2;
            default:
                return 0;
        }
    }
}

3. 启动计算器

最后,我们将UI和逻辑组合起来,启动计算器。

以下是启动计算器的示例代码:

public class Calculator {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            CalculatorUI ui = new CalculatorUI();
            CalculatorLogic logic = new CalculatorLogic(ui);
            ui.setVisible(true);
        });
    }
}

至此,完整实现过程已经结束。你可以运行这个程序,看看实现结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java编写简单计算器的完整实现过程 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Java全面解析string类型的xml字符串

    要解析含有XML标签的字符串,可以使用Java中自带的解析API——DOM(文档对象模型),或者第三方的解析库——JDOM、DOM4J等。下面以DOM为例,提供一份Java全面解析string类型的XML字符串的攻略。 1. 准备字符串 假设有一个字符串xmlString,它包含以下XML标签: <person> <name>Tom&…

    Java 2023年5月27日
    00
  • 三道java新手入门面试题,通往自由的道路–锁+Volatile

    三道Java新手入门面试题攻略 一、什么是锁? 锁是一种同步机制,用于控制多个线程对共享资源的访问。当多个线程试图访问同一共享资源时,可能会导致数据不一致或者其他问题,而锁就可以保证同一时刻只有一个线程访问该共享资源,避免多线程并发访问发生问题。 Java提供了两种锁机制:synchronized关键字和Lock接口。 synchronized关键字 syn…

    Java 2023年5月19日
    00
  • Java实现DES加解密算法解析

    Java实现DES加解密算法解析 DES算法简介 DES(Data Encryption Standard)是一种对称加密算法,是现今使用最普遍的加密算法之一。它使用64位密钥对64位的数据进行加密和解密,加密和解密使用相同的密钥,是一种对称算法。 DES算法分组加密,每次加密的明文长度为64bit,密钥长度为64bit,加密过程中,将明文分成64bit一组…

    Java 2023年5月26日
    00
  • Perl使用Tesseract-OCR实现验证码识别教程

    下面我将为您详细讲解如何使用Perl语言配合Tesseract-OCR开源库实现验证码识别。整个过程共分为以下几个步骤: 安装Tesseract-OCR 安装Perl模块 获取验证码图片 预处理图片 使用Tesseract-OCR进行识别 整合以上步骤 接下来,我们将一步一步来看每个步骤的详细说明。 安装Tesseract-OCR Tesseract-OCR…

    Java 2023年5月26日
    00
  • javaWeb使用Kaptcha组件生成验证码

    下面为您详细讲解“javaWeb使用Kaptcha组件生成验证码”的完整攻略。 什么是Kaptcha组件 Kaptcha是Google code上的一个开源项目,是一个Java的验证码组件,可用于生成验证码。 Kaptcha组件的优点 与其他验证码组件相比,Kaptcha组件有以下优点: 易于使用和集成。 提供了丰富的配置选项,可以自由定制验证码图片样式。 …

    Java 2023年6月15日
    00
  • Tomcat配置https并访问http自动跳转至https

    下面是Tomcat配置https并访问http自动跳转至https的完整攻略,过程中包含两条示例说明。 准备工作 在进行Tomcat配置https之前,需要先准备以下工作: 申请SSL证书。可以通过CA机构购买或者免费的Let’s Encrypt证书。这里以Let’s Encrypt为例进行说明。 安装Java JDK,并配置环境变量。 安装Tomcat。这…

    Java 2023年6月15日
    00
  • Java中BigDecimal的加减乘除、比较大小与使用注意事项

    Java中BigDecimal的加减乘除、比较大小与使用注意事项 简介 在Java中,double和float等浮点数类型存在精度问题,会出现计算结果不准确的情况。而BigDecimal是一种高精度的数据类型,它可以解决浮点数计算精度问题。BigDecimal的精度可以达到需要表示的精确度,且不会出现计算误差。因此,在需要高精度计算的场合下,我们通常会使用B…

    Java 2023年5月26日
    00
  • 深入浅析Jsp中 out.print 和 out.write 的区别

    这篇攻略将会详细探讨JSP中out.print和out.write的区别。 概述 在JSP页面中,有两个对象分别是out和response,用于将数据传送到浏览器。其中,out对象提供了一些方法,通过该方法我们可以输出一些内容到浏览器端的页面。 out对象的方法有很多,其中比较常用的是out.print和out.write。这里我们将会讲解这两个方法的区别。…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部