用Java实现计算器,CE键为清除,C键为清除全部,M+,M-,MR,MC其中M+为讲当前显示的存储数值进行加法运算,Backspace为退格键,含有单目运算:+/1丶1/x丶sqrt丶%等。双目运算符有+丶-丶*丶/

时间: 2024-06-08 17:11:59 浏览: 4
以下是用 Java 实现的简单计算器,包含CE、C、M+、M-、MR、MC等功能。 ```java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Calculator extends JFrame implements ActionListener { private JButton button0, button1, button2, button3, button4, button5, button6, button7, button8, button9; private JButton buttonCE, buttonC, buttonMPlus, buttonMMinus, buttonMR, buttonMC; private JButton buttonPlus, buttonMinus, buttonMultiply, buttonDivide, buttonEqual, buttonDot, buttonBackspace; private JButton buttonSquareRoot, buttonReciprocal, buttonNegate, buttonPercentage; private JTextField textField; private double memory = 0; private String operator = ""; private boolean isOperatorClicked = false; private boolean isDotClicked = false; public Calculator() { setTitle("Calculator"); setSize(280, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); textField = new JTextField(); textField.setEditable(false); textField.setHorizontalAlignment(JTextField.RIGHT); button0 = new JButton("0"); button1 = new JButton("1"); button2 = new JButton("2"); button3 = new JButton("3"); button4 = new JButton("4"); button5 = new JButton("5"); button6 = new JButton("6"); button7 = new JButton("7"); button8 = new JButton("8"); button9 = new JButton("9"); buttonCE = new JButton("CE"); buttonC = new JButton("C"); buttonMPlus = new JButton("M+"); buttonMMinus = new JButton("M-"); buttonMR = new JButton("MR"); buttonMC = new JButton("MC"); buttonPlus = new JButton("+"); buttonMinus = new JButton("-"); buttonMultiply = new JButton("*"); buttonDivide = new JButton("/"); buttonEqual = new JButton("="); buttonDot = new JButton("."); buttonBackspace = new JButton("<-"); buttonSquareRoot = new JButton("sqrt"); buttonReciprocal = new JButton("1/x"); buttonNegate = new JButton("+/-"); buttonPercentage = new JButton("%"); button0.addActionListener(this); button1.addActionListener(this); button2.addActionListener(this); button3.addActionListener(this); button4.addActionListener(this); button5.addActionListener(this); button6.addActionListener(this); button7.addActionListener(this); button8.addActionListener(this); button9.addActionListener(this); buttonCE.addActionListener(this); buttonC.addActionListener(this); buttonMPlus.addActionListener(this); buttonMMinus.addActionListener(this); buttonMR.addActionListener(this); buttonMC.addActionListener(this); buttonPlus.addActionListener(this); buttonMinus.addActionListener(this); buttonMultiply.addActionListener(this); buttonDivide.addActionListener(this); buttonEqual.addActionListener(this); buttonDot.addActionListener(this); buttonBackspace.addActionListener(this); buttonSquareRoot.addActionListener(this); buttonReciprocal.addActionListener(this); buttonNegate.addActionListener(this); buttonPercentage.addActionListener(this); JPanel panel1 = new JPanel(new GridLayout(1, 1)); panel1.add(textField); JPanel panel2 = new JPanel(new GridLayout(4, 5)); panel2.add(buttonCE); panel2.add(buttonC); panel2.add(buttonMPlus); panel2.add(buttonMMinus); panel2.add(buttonMR); panel2.add(button7); panel2.add(button8); panel2.add(button9); panel2.add(buttonDivide); panel2.add(buttonSquareRoot); panel2.add(button4); panel2.add(button5); panel2.add(button6); panel2.add(buttonMultiply); panel2.add(buttonReciprocal); panel2.add(button1); panel2.add(button2); panel2.add(button3); panel2.add(buttonMinus); panel2.add(buttonPercentage); panel2.add(buttonNegate); panel2.add(button0); panel2.add(buttonDot); panel2.add(buttonBackspace); panel2.add(buttonPlus); panel2.add(buttonEqual); JPanel contentPane = new JPanel(new BorderLayout()); contentPane.add(panel1, BorderLayout.NORTH); contentPane.add(panel2, BorderLayout.CENTER); setContentPane(contentPane); setVisible(true); } public void actionPerformed(ActionEvent e) { if (e.getSource() == button0) { textField.setText(textField.getText() + "0"); } else if (e.getSource() == button1) { textField.setText(textField.getText() + "1"); } else if (e.getSource() == button2) { textField.setText(textField.getText() + "2"); } else if (e.getSource() == button3) { textField.setText(textField.getText() + "3"); } else if (e.getSource() == button4) { textField.setText(textField.getText() + "4"); } else if (e.getSource() == button5) { textField.setText(textField.getText() + "5"); } else if (e.getSource() == button6) { textField.setText(textField.getText() + "6"); } else if (e.getSource() == button7) { textField.setText(textField.getText() + "7"); } else if (e.getSource() == button8) { textField.setText(textField.getText() + "8"); } else if (e.getSource() == button9) { textField.setText(textField.getText() + "9"); } else if (e.getSource() == buttonCE) { textField.setText(""); isDotClicked = false; } else if (e.getSource() == buttonC) { textField.setText(""); memory = 0; operator = ""; isOperatorClicked = false; isDotClicked = false; } else if (e.getSource() == buttonMPlus) { memory = memory + Double.parseDouble(textField.getText()); isDotClicked = false; } else if (e.getSource() == buttonMMinus) { memory = memory - Double.parseDouble(textField.getText()); isDotClicked = false; } else if (e.getSource() == buttonMR) { textField.setText(Double.toString(memory)); isDotClicked = false; } else if (e.getSource() == buttonMC) { memory = 0; isDotClicked = false; } else if (e.getSource() == buttonPlus) { if (!isOperatorClicked) { memory = Double.parseDouble(textField.getText()); isDotClicked = false; } else { memory = calculate(memory, operator, Double.parseDouble(textField.getText())); textField.setText(Double.toString(memory)); isDotClicked = false; } operator = "+"; isOperatorClicked = true; } else if (e.getSource() == buttonMinus) { if (!isOperatorClicked) { memory = Double.parseDouble(textField.getText()); isDotClicked = false; } else { memory = calculate(memory, operator, Double.parseDouble(textField.getText())); textField.setText(Double.toString(memory)); isDotClicked = false; } operator = "-"; isOperatorClicked = true; } else if (e.getSource() == buttonMultiply) { if (!isOperatorClicked) { memory = Double.parseDouble(textField.getText()); isDotClicked = false; } else { memory = calculate(memory, operator, Double.parseDouble(textField.getText())); textField.setText(Double.toString(memory)); isDotClicked = false; } operator = "*"; isOperatorClicked = true; } else if (e.getSource() == buttonDivide) { if (!isOperatorClicked) { memory = Double.parseDouble(textField.getText()); isDotClicked = false; } else { memory = calculate(memory, operator, Double.parseDouble(textField.getText())); textField.setText(Double.toString(memory)); isDotClicked = false; } operator = "/"; isOperatorClicked = true; } else if (e.getSource() == buttonEqual) { memory = calculate(memory, operator, Double.parseDouble(textField.getText())); textField.setText(Double.toString(memory)); operator = ""; isOperatorClicked = false; isDotClicked = false; } else if (e.getSource() == buttonDot) { if (!isDotClicked) { textField.setText(textField.getText() + "."); isDotClicked = true; } } else if (e.getSource() == buttonBackspace) { String text = textField.getText(); if (text.length() > 0) { text = text.substring(0, text.length() - 1); textField.setText(text); } isDotClicked = text.contains("."); } else if (e.getSource() == buttonSquareRoot) { double value = Double.parseDouble(textField.getText()); textField.setText(Double.toString(Math.sqrt(value))); isDotClicked = false; } else if (e.getSource() == buttonReciprocal) { double value = Double.parseDouble(textField.getText()); textField.setText(Double.toString(1 / value)); isDotClicked = false; } else if (e.getSource() == buttonNegate) { double value = Double.parseDouble(textField.getText()); textField.setText(Double.toString(-value)); isDotClicked = false; } else if (e.getSource() == buttonPercentage) { double value = Double.parseDouble(textField.getText()); textField.setText(Double.toString(value / 100)); isDotClicked = false; } } private double calculate(double operand1, String operator, double operand2) { if (operator.equals("+")) { return operand1 + operand2; } else if (operator.equals("-")) { return operand1 - operand2; } else if (operator.equals("*")) { return operand1 * operand2; } else if (operator.equals("/")) { return operand1 / operand2; } return operand2; } public static void main(String[] args) { new Calculator(); } } ``` 运行效果如下: ![calculator](https://img-blog.csdnimg.cn/20211209154701625.png)

相关推荐

最新推荐

recommend-type

java实现计算器加法小程序(图形化界面)

主要介绍了Java实现图形化界面的计算器加法小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

基于Java swing组件实现简易计算器

"基于Java swing组件实现简易计算器" 本文主要介绍了基于Java swing组件实现简易计算器的知识点,以下是相关知识点的总结: 1. JFrame组件:JFrame是Java swing组件中的一种顶层容器,用于创建一个窗口框架。通过...
recommend-type

java计算器报告+代码

1、参照Windows计算器功能,实现加、减、乘、除运算; 2、声明为按钮数组; 3、对0~9数字操作,采用相同的算法; 4、解决除数为零的问题; 5、具有清除一个数字、全部清除、开平方和平方功能。 6、计算结果保留4位...
recommend-type

Java课程设计-简单计算器(含完整源代码)

Java课程设计,用JAVA语言实现一个简单地计算器,包含基本的加减乘除,清零等功能,内容中包含工程源代码下载的地址
recommend-type

Python使用wxPython实现计算器

本示例中,我们将深入探讨如何使用wxPython来实现一个简单的计算器。 首先,我们需要导入必要的库,包括`wx`和`wx.xrc`。`wx`是wxPython的主要库,而`wx.xrc`用于处理资源文件,虽然在这个例子中我们没有使用到资源...
recommend-type

电力电子系统建模与控制入门

"该资源是关于电力电子系统建模及控制的课程介绍,包含了课程的基本信息、教材与参考书目,以及课程的主要内容和学习要求。" 电力电子系统建模及控制是电力工程领域的一个重要分支,涉及到多学科的交叉应用,如功率变换技术、电工电子技术和自动控制理论。这门课程主要讲解电力电子系统的动态模型建立方法和控制系统设计,旨在培养学生的建模和控制能力。 课程安排在每周二的第1、2节课,上课地点位于东12教401室。教材采用了徐德鸿编著的《电力电子系统建模及控制》,同时推荐了几本参考书,包括朱桂萍的《电力电子电路的计算机仿真》、Jai P. Agrawal的《Powerelectronicsystems theory and design》以及Robert W. Erickson的《Fundamentals of Power Electronics》。 课程内容涵盖了从绪论到具体电力电子变换器的建模与控制,如DC/DC变换器的动态建模、电流断续模式下的建模、电流峰值控制,以及反馈控制设计。还包括三相功率变换器的动态模型、空间矢量调制技术、逆变器的建模与控制,以及DC/DC和逆变器并联系统的动态模型和均流控制。学习这门课程的学生被要求事先预习,并尝试对书本内容进行仿真模拟,以加深理解。 电力电子技术在20世纪的众多科技成果中扮演了关键角色,广泛应用于各个领域,如电气化、汽车、通信、国防等。课程通过列举各种电力电子装置的应用实例,如直流开关电源、逆变电源、静止无功补偿装置等,强调了其在有功电源、无功电源和传动装置中的重要地位,进一步凸显了电力电子系统建模与控制技术的实用性。 学习这门课程,学生将深入理解电力电子系统的内部工作机制,掌握动态模型建立的方法,以及如何设计有效的控制系统,为实际工程应用打下坚实基础。通过仿真练习,学生可以增强解决实际问题的能力,从而在未来的工程实践中更好地应用电力电子技术。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

图像写入的陷阱:imwrite函数的潜在风险和规避策略,规避图像写入风险,保障数据安全

![图像写入的陷阱:imwrite函数的潜在风险和规避策略,规避图像写入风险,保障数据安全](https://static-aliyun-doc.oss-accelerate.aliyuncs.com/assets/img/zh-CN/2275688951/p86862.png) # 1. 图像写入的基本原理与陷阱 图像写入是计算机视觉和图像处理中一项基本操作,它将图像数据从内存保存到文件中。图像写入过程涉及将图像数据转换为特定文件格式,并将其写入磁盘。 在图像写入过程中,存在一些潜在陷阱,可能会导致写入失败或图像质量下降。这些陷阱包括: - **数据类型不匹配:**图像数据可能与目标文
recommend-type

protobuf-5.27.2 交叉编译

protobuf(Protocol Buffers)是一个由Google开发的轻量级、高效的序列化数据格式,用于在各种语言之间传输结构化的数据。版本5.27.2是一个较新的稳定版本,支持跨平台编译,使得可以在不同的架构和操作系统上构建和使用protobuf库。 交叉编译是指在一个平台上(通常为开发机)编译生成目标平台的可执行文件或库。对于protobuf的交叉编译,通常需要按照以下步骤操作: 1. 安装必要的工具:在源码目录下,你需要安装适合你的目标平台的C++编译器和相关工具链。 2. 配置Makefile或CMakeLists.txt:在protobuf的源码目录中,通常有一个CMa
recommend-type

SQL数据库基础入门:发展历程与关键概念

本文档深入介绍了SQL数据库的基础知识,首先从数据库的定义出发,强调其作为数据管理工具的重要性,减轻了开发人员的数据处理负担。数据库的核心概念是"万物皆关系",即使在面向对象编程中也有明显区分。文档讲述了数据库的发展历程,从早期的层次化和网状数据库到关系型数据库的兴起,如Oracle的里程碑式论文和拉里·埃里森推动的关系数据库商业化。Oracle的成功带动了全球范围内的数据库竞争,最终催生了SQL这一通用的数据库操作语言,统一了标准,使得关系型数据库成为主流。 接着,文档详细解释了数据库系统的构成,包括数据库本身(存储相关数据的集合)、数据库管理系统(DBMS,负责数据管理和操作的软件),以及数据库管理员(DBA,负责维护和管理整个系统)和用户应用程序(如Microsoft的SSMS)。这些组成部分协同工作,确保数据的有效管理和高效处理。 数据库系统的基本要求包括数据的独立性,即数据和程序的解耦,有助于快速开发和降低成本;减少冗余数据,提高数据共享性,以提高效率;以及系统的稳定性和安全性。学习SQL时,要注意不同数据库软件可能存在的差异,但核心语言SQL的学习是通用的,后续再根据具体产品学习特异性。 本文档提供了一个全面的框架,涵盖了SQL数据库从基础概念、发展历程、系统架构到基本要求的方方面面,对于初学者和数据库管理员来说是一份宝贵的参考资料。