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常见的3种文件上传方法和速度对比

    关于Java常见的3种文件上传方法和速度对比,我可以提供以下完整攻略: Java常见的3种文件上传方法和速度对比 文件上传是现代web应用程序中常见的功能之一。在Java中,有许多方法可用于上传文件。在本篇文章中,将介绍Java中最常见的3种文件上传方法,并比较它们的速度和优缺点。 1. 原始Servlet API 在早期的Java Web项目中, Serv…

    Java 2023年5月19日
    00
  • Java中不常用但很好用的开发小技巧分享

    下面是 “Java中不常用但很好用的开发小技巧分享” 的完整攻略: 一、使用Lambda表达式简化代码 Lambda表达式是Java 8中引入的新特性,它可以将方法当做参数进行传递,从而简化代码。比如,在Java 8之前,如果我们要对一个集合进行排序,通常需要实现Comparator接口,然后实现compare方法。而在Java 8中,我们可以使用Lambd…

    Java 2023年5月23日
    00
  • JAVA实现扫描线算法(超详细)

    JAVA实现扫描线算法(超详细)攻略 什么是扫描线算法 扫描线算法是一种在计算机图形学中应用广泛的算法,用于处理一个给定的边缘多边形。常见的使用场景包括:计算面积、求交集、裁剪等等。 扫描线算法的基本思路是将多边形沿着y轴方向切分成若干个互不相交的线段。然后从最小y值的线段开始按照y值升序排序,把线段依次加入扫描线列表。不断扫描y轴,每扫描到一个y值点就删去…

    Java 2023年5月19日
    00
  • springboot 使用clickhouse实时大数据分析引擎(使用方式)

    使用ClickHouse实现大数据分析是一个常见的需求,Spring Boot提供了非常便利的方式来集成ClickHouse分析引擎。以下是使用Spring Boot集成ClickHouse的步骤: 1.添加ClickHouse的依赖 在Spring Boot的项目中添加ClickHouse Driver的依赖,可以通过以下的方式添加到项目的pom.xml文…

    Java 2023年5月20日
    00
  • Java String index out of range:100错误解决方案详解

    针对这个主题,我将分为以下几个部分进行讲解: 问题描述 问题原因 解决方案详解 示例说明 总结 1. 问题描述 在Java开发中,我们可能会遇到 “String index out of range” 错误,错误提示通常会包含一个数字,如:100。这类错误会导致程序无法正常运行,需要寻找解决方案来解决。 2. 问题原因 这个错误的产生原因通常是由于字符串中字…

    Java 2023年5月27日
    00
  • Java 实战练手项目之校园超市管理系统的实现流程

    校园超市管理系统是一个相对综合的Java实战练手项目,涉及到多个模块和技术。下面将详细阐述实现该系统的完整攻略。 1. 需求分析 在实现任何一个应用程序之前,我们需要首先进行需求分析,确定该系统需要满足哪些需求。在校园超市管理系统中,常见的需求包括: 商品管理:实现商品的添加、编辑、删除、查询等功能; 库存管理:对库存进行统计、报表展示等操作; 订单管理:实…

    Java 2023年5月31日
    00
  • Spring Security 实现用户名密码登录流程源码详解

    下面是关于Spring Security实现用户名密码登录流程源码详解的完整攻略: Spring Security 实现用户名密码登录流程源码详解 什么是 Spring Security Spring Security是基于Spring框架的安全框架,它提供了企业级的安全性,可以防止用户身份被窃取、数据被篡改、应用被攻击等安全问题。它支持各种认证机制,包括基…

    Java 2023年5月20日
    00
  • 支持Java 14!Java开发工具IntelliJ IDEA 2020.1稳定版发布

    下面是关于“支持Java 14!Java开发工具IntelliJ IDEA 2020.1稳定版发布”的详细攻略: 什么是IntelliJ IDEA? IntelliJ IDEA是一款由JetBrains开发的Java和其他编程语言的集成开发环境(IDE)。它提供了强大的功能,如代码智能提示、错误检查、重构、版本控制等等,同时也支持许多其他开发技术和框架。In…

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