计算器的模拟实现

news2024/11/30 14:34:33

计算器的模拟实现

  • 一、实验题目:计算器
  • 二:实验目的:
  • 三:实验内容与实现
    • 1:【实验内容】
    • 2:【实验实现】
      • 1.计算器界面的实现,如下图所示:
      • 2:各项功能的实现,如下图所示:
      • 3:具体的实现代码:

一、实验题目:计算器

二:实验目的:

通过本次实验使学生掌握java语言图形用户界面开发的相关技术。

三:实验内容与实现

1:【实验内容】

完成计算器的加、减、乘、除、开方、求反等功能,具体功能需求可以参考window自带计算器。如图:
在这里插入图片描述

2:【实验实现】

1.计算器界面的实现,如下图所示:

在这里插入图片描述
在这里插入图片描述

2:各项功能的实现,如下图所示:

在这里插入图片描述
在这里插入图片描述

3:具体的实现代码:

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

public class Calculator extends JFrame implements ActionListener {
    //声明并初始化各组件
    private JTextField displayField;
    private JButton addButton, subtractButton, multiplyButton, divideButton,
            sqrtButton, negateButton, equalsButton;
    private double currentValue = 0.0;
    private String currentOperation = "=";

    public Calculator() {
        //设置窗口标题和关闭操作
        setTitle("Calculator");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //设置窗口的大小
       setSize(300, 300);
        //创建并设置显示框
        displayField = new JTextField("0");
        displayField.setEditable(false);
        displayField.setHorizontalAlignment(JTextField.RIGHT);
        add(displayField, BorderLayout.NORTH);
       //设置按钮面板
        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(new GridLayout(5, 4));
       //初始化并添加加法按钮
        addButton = new JButton("+");
        addButton.addActionListener(this);
        buttonPanel.add(addButton);
        //初始化并添加减法按钮
        subtractButton = new JButton("-");
        subtractButton.addActionListener(this);
        buttonPanel.add(subtractButton);
        //初始化并添加乘法按钮
        multiplyButton = new JButton("*");
        multiplyButton.addActionListener(this);
        buttonPanel.add(multiplyButton);
        //初始化并添加除法按钮
        divideButton = new JButton("/");
        divideButton.addActionListener(this);
        buttonPanel.add(divideButton);
        //初始化并添加平方根按钮
        sqrtButton = new JButton("sqrt");
        sqrtButton.addActionListener(this);
        buttonPanel.add(sqrtButton);
        //初始化并添加正负号按钮
        negateButton = new JButton("+/-");
        negateButton.addActionListener(this);
        buttonPanel.add(negateButton);
        //初始化并添加等于号按钮
        equalsButton = new JButton("=");
        equalsButton.addActionListener(this);
        equalsButton.setForeground(Color.RED);
        buttonPanel.add(equalsButton);
        //初始化并添加数字按钮(0——9)
        for (int i = 1; i < 10; i++) {
            JButton digitButton = new JButton(String.valueOf(i));
            digitButton.addActionListener(this);
            buttonPanel.add(digitButton);
        }
       //将面板添加到窗口
        add(buttonPanel, BorderLayout.CENTER);
    }

    public void actionPerformed(ActionEvent e) {
        String buttonText = e.getActionCommand();

        if (buttonText.equals("C")) {//处理清空按钮,删除当前值
            currentValue = 0.0;
            currentOperation = "=";
            displayField.setText("0");
        } else if (buttonText.equals("+")) {//处理加法按钮,保存当前值和操作符,并将显示框文本重置为0
            currentValue = Double.parseDouble(displayField.getText());
            currentOperation = "+";
            displayField.setText("0");
        } else if (buttonText.equals("-")) {//处理减法按钮,保存当前值和操作符,并将显示框文本重置为0
            currentValue = Double.parseDouble(displayField.getText());
            currentOperation = "-";
            displayField.setText("0");
        } else if (buttonText.equals("*")) {//处理乘法按钮,保存当前值和操作符,并将显示框文本重置为0
            currentValue = Double.parseDouble(displayField.getText());
            currentOperation = "*";
            displayField.setText("0");        }
        else if (buttonText.equals("/")) {//处理除法按钮,保存当前值和操作符,并将显示框文本重置为0
            currentValue = Double.parseDouble(displayField.getText());
            currentOperation = "/";
            displayField.setText("0");
        } else if (buttonText.equals("sqrt")) {//处理平方根按钮,保存当前值和操作符,并将显示框文本重置为0
            currentValue = Double.parseDouble(displayField.getText());
            currentValue = Math.sqrt(currentValue);
            displayField.setText(String.valueOf(currentValue));
        } else if (buttonText.equals("+/-")) {//处理正负号事件,
            currentValue = Double.parseDouble(displayField.getText());
            currentValue = -currentValue;
            displayField.setText(String.valueOf(currentValue));
        } else if (buttonText.equals("=")) {//处理等号按钮,执行计算操作并更新显示框文本
            double newValue = Double.parseDouble(displayField.getText());
            if (currentOperation.equals("+")) {
                currentValue += newValue;
            } else if (currentOperation.equals("-")) {
                currentValue -= newValue;
            } else if (currentOperation.equals("*")) {
                currentValue *= newValue;
            } else if (currentOperation.equals("/")) {
                currentValue /= newValue;
            }
            //更新显示框文本
            displayField.setText(String.valueOf(currentValue));
            currentOperation = "=";
        } else {
            if (displayField.getText().equals("0")) {
                displayField.setText(buttonText);
            } else {//添加新的数字到显示框
                displayField.setText(displayField.getText() + buttonText);
            }
        }
    }

    public static void main(String[] args) {
        Calculator calculator = new Calculator();
        calculator.setVisible(true);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1253438.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

canvas版放大镜

效果预览图 完整代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>放大镜</title><st…

C++ vector迭代器失效

STL中vector迭代器失效常见错误写法示例 最近在看STL容器失效的例子&#xff0c;涉及到vector数组迭代器失效的问题&#xff0c;如果不注意使用&#xff0c;很容易出现问题&#xff0c;我们先来看一下一个简单的示例程序&#xff0c;在数组nums中删除大于50的元素&#xff0c;…

运维高级-day01

shell回顾 1、快速生成版权控制信息&#xff0c;具体的内容自己替换 [root scripts]# cat ~/.vimrc autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()" func SetTitle() if expand("%:e") sh call setline(1,"#!/bin/bash")…

【数据库篇】关系模式的表示——(2)规范化

范式&#xff1a;范式是符合某一种级别的关系模式的集合 规范化&#xff1a;是指一个低一级的范式的关系模式&#xff0c;通过模式的分解转换为若干个高一级范式的关系模式的集合。 1NF 每个分量必须是不可分开的数据项&#xff0c;满足这个条件的关系模式就是1NF。 2NF 若…

代码随想录算法训练营第四十六天【动态规划part08】 | 139.单词拆分、背包总结

139.单词拆分 题目链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 求解思路&#xff1a; 单词是物品&#xff0c;字符串s是背包&#xff0c;单词能否组成字符串s&#xff0c;就是问物品能不能把背包装满。 动规五部曲 确定dp数…

②⑩① 【MySQL】什么是分库分表?拆分策略有什么?什么是MyCat?

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 目录 ②⑩① 【MySQL】什么是分库分表&#xf…

定时器/计数器的应用

前言 对近期学习定时器进行简单的记录 参考链接 LED数码管的静态显示与动态显示&#xff08;KeilProteus&#xff09;-CSDN博客 外中断的应用-CSDN博客 【mcuclub】定时器/计数器_定时器/计数器的内部结构和工作方式-CSDN博客 5.图解定时器/计数器 - 知乎 (zhihu.com) 5…

CPU、GPU、TPU内存子系统架构

文章目录 CPU、GPU、TPU内存子系统架构概要CPUGPUTPU共同点和差异&#xff1a; CPU、GPU、TPU内存子系统架构 概要 Memory Subsystem Architecture&#xff0c;图源自TVM CPU CPU&#xff08;中央处理器&#xff09;的内存子系统&#xff1a;隐式管理 主内存&#xff08;…

VMware如何导出和导入镜像OVF虚拟机(以unbuntu为例)

前言&#xff1a;我下载了一个unbuntu的系统镜像&#xff0c;基于这个镜像创建了一个unbuntu的虚拟机&#xff0c;辛辛苦苦配置需要的开发环境&#xff0c;如&#xff1a;安装了mysql&#xff0c;安装了jdk等&#xff0c;此时&#xff0c;我的同事可能需要也是同一套类似环境&a…

视觉CV-AIGC一周最新技术精选(2023-11)

PG-Video-LLaVA: Pixel Grounding Large Video-Language Models https://github.com/mbzuai-oryx/Video-LLaVA将基于图像的大型多模态模型&#xff08;LMM&#xff09;扩展到视频领域是具有挑战性的。最近将基于图像的LMM扩展到视频的方法要么缺乏grounding定位能力&#xff08…

SQL sever2008中的游标

目录 一、游标概述 二、游标的实现 三、优缺点 3.1优点&#xff1a; 3.2缺点&#xff1a; 四、游标类型 4.1静态游标 4.2动态游标 4.3只进游标 4.4键集驱动游标 4.5显示游标&#xff1a; 4.6隐式游标 五、游标基本操作 5.1声明游标 5.1.1.IS0标准语法 5.1.1.1语…

nodejs+vue+python+PHP+微信小程序-书吧租阅管理系统的设计与实现-安卓-计算机毕业设计

在当今高度发达的信息中&#xff0c;信息管理改革已成为一种更加广泛和全面的趋势。为确保中国经济的持续发展&#xff0c;信息时代日益更新&#xff0c;书吧租阅管理系统仍在蓬勃发展。同时&#xff0c;随着信息社会的快速发展&#xff0c;各种管理系统面临着越来越多的数据需…

leetcode刷题日志-15.三数之和

这道题还是有点难度&#xff0c;我能想到的就是三重循环&#xff0c;但是题目限制不能重复&#xff0c;所以这道题三重循环完还要去重&#xff0c;太过于麻烦。看了题解以后&#xff0c;大佬们还是厉害&#xff0c;大概思路是这样子的&#xff1a;先对数组进行排序&#xff0c;…

pandas根据列正逆序排序

题目&#xff1a;根据 buy_quantity 列进行排名&#xff0c;相同值分配相同的最低排名。 import pandas as pd# 创建一个示例 DataFrame data {item_id: [1, 2, 3, 4, 5, 6, 7], buy_quantity: [1, 2, 2, 3, 3, 4, 5]} df pd.DataFrame(data)# 使用 rank() 函数为 buy_quant…

电商数据|淘宝商品数据接口接入|参数|获取商品订单物流|电商数据分析

授权认证 授权不是开放平台对服务商应用的授权 &#xff0c;而是需要开放平台的客户&#xff08;用户&#xff09;对服务商应用的授予&#xff0c;比如ERP应用&#xff0c;也就是淘宝的店铺商家对应用进行授权&#xff0c;使其能够拉取到店铺的订单来完成订单履约。 淘宝授权页…

C++ day39 动态规划 不同路径 不同路径Ⅱ

题目1&#xff1a;62 不同路径 题目链接 &#xff1a;不同路径 对题目的理解 机器人位于m*n的网格中的左上角start,求解走到网格右下角finish的移动路径 动规五部曲 1&#xff09;dp数组的含义以及下标i的含义 dp[i][j]&#xff1a;从start&#xff08;0&#xff0c;0&…

继承性和多态性实验

继承性和多态性实验 一、实验题目二、实验目的三、实验内容与实现1&#xff1a;【实验内容】2:【实验实现】雇员类&#xff08;Employee&#xff09;的实现&#xff0c;如下图所示&#xff1a;2&#xff1a;经理类&#xff08;Manager&#xff09;的实现&#xff0c;如下图所示…

Feast:概念

实体 实体是语义相关特征的集合。用户定义实体以映射其用例的领域。 例如&#xff0c;打车车服务可以将客户和司机作为实体&#xff0c;这些实体将相关特征分组&#xff0c;对应于这些客户和司机。 driver Entity(namedriver, join_keys[driver_id]) # 司机实体 customer E…

⑨【Stream】Redis流是什么?怎么用?: Stream [使用手册]

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ ⑨Redis Stream基本操作命令汇总 一、Redis流 …

系列十六、Spring IOC容器的扩展点

一、概述 Spring IOC容器的扩展点是指在IOC加载的过程中&#xff0c;如何对即将要创建的bean进行扩展。 二、扩展点 2.1、BeanDefinitionRegistryPostProcessor 2.1.1、概述 BeanDefinitionRegistryPostProcessor是bean定义的后置处理器&#xff0c;在BeanDefinition加载后&a…