Java实现简易计算器

简易计算器 Java 实现 在本篇文章中,我们将使用 Java 编程语言实现一个简易计算器。我们将通过编写代码来实现这个计算器,并演示其使用方法。例如,可以添加更多的运算功能,支持小数运算或复杂表达式的计算等。同时,还可以优化用户界面,使其更加美观和易用。通过以上代码实现,我们成功完成了一个简易计算器的开发。希望本篇文章对初学者理解和学习 Java 编程有所帮助,也希望读者能够通过这个简易计算器的实现,掌握基本的编程思路和技巧。编译代码:将以上代码保存为 Calculator.java 文件,并使用 Java 编译器进行编译。 阅读详情

利用课余时间手写了一个简易的计算器
基本思路如下
1. 首先利用java–swing建立计算器的界面
2. 实现计算逻辑

首先定义了一个body类,整个逻辑都在这一个类中完成的,最开始是用两个类分别实现逻辑的,后来不知道怎么的一直报内存溢出的错误,所以干脆就在一个类中完成了。
计算器界面的代码如下

class body{
	JFrame jframe = new JFrame();
	Container con = jframe.getContentPane();
	JButton b1 = new JButton("1");
	JButton b2 = new JButton("2");
	JButton b3 = new JButton("3");
	JButton b4 = new JButton("4");
	JButton b5 = new JButton("5");
	JButton b6 = new JButton("6");
	JButton b7 = new JButton("7");
	JButton b8 = new JButton("8");
	JButton b9 = new JButton("9");
	JButton b0 = new JButton("0");
	JButton b_multi = new JButton("*");
	JButton b_division = new JButton("/");
	JButton b_tip = new JButton(".");
	JButton b_equal = new JButton("=");
	JButton b_add = new JButton("+");
	JButton b_cut = new JButton("-");
	JButton temp = new JButton();
	//-------------------------------------//
	JPanel jp1 = new JPanel();
	JPanel jp2 = new JPanel();
	JTextField jtf = new JTextField(20);

body(){
		jframe.setTitle("my_counter");
		jframe.setVisible(true);
		jframe.setDefaultCloseOperation(jframe.EXIT_ON_CLOSE);
		jframe.add(jp1, BorderLayout.NORTH);
		jframe.setResizable(false);
		jframe.setLocation(800, 300);
		jp1.add(jtf);
		JButton bu[] = new JButton[] {b7, b8, b9, b_division, b4, b5, b6, b_multi, b1, b2, b3, b_add, b0, b_tip, b_equal, b_cut};
		for(int i=0; i<bu.length; i++) {
			bu[i].addActionListener(new jbAction());
			jp2.add(bu[i]);
		}
		jp2.setLayout(new GridLayout(4, 4));
		con.add(jp1, BorderLayout.NORTH);
		con.add(jp2, BorderLayout.SOUTH);
		jframe.pack();
	}

这里是用swing自带的pack()方法自动适应界面填充组件大小,最后实现的计算器界面非常的小(有点看不下去),如果想自己设置各组件的大小,记得要把布局管理设置为null,并且根据界面自行调整坐标(麻烦啊)…

然后是计算逻辑

class body{
	

	//创建字符串对象,用来使表达式能够完整的显示在文本框里
	StringBuffer str = new StringBuffer("");

	//实现运算逻辑所需要的变量		
	StringBuffer result=new StringBuffer("");        //用于存储左值(也是结果)和右值的累加值	
	StringBuffer right=new StringBuffer("");
	double result2;                //表达式左值,也是结果
	double right2;               //表达式右值
	String bool;             //存储运算符号
	int k1 = 0;          	//k1=0时为左值,k1=1时为中间的运算符号值,k1=2时为右值
	int k2 = 1;            //在最后输出结果的时候不让监听方法里面进入循环语句,k=1时可进入,k=0时不可进入
class jbAction implements ActionListener{
		JButton jb = new JButton();
		@Override
		public void actionPerformed(ActionEvent e) {
			jb = (JButton)e.getSource();
			if(k1 == 0 && k2 == 1){
				if(jb.getText().equals("+") || jb.getText().equals("-") || jb.getText().equals("*") || jb.getText().equals("/")){
					result2 = Double.parseDouble(result.toString());
					k1 = 1;
				}
				result.append(jb.getText());
			}
			if (k1 == 1 && k2 == 1) {
				bool = jb.getText();
				k1 = 2;
			}else if(k1 == 2 && k2 == 1){
				if(jb.getText().equals("=")){
					right2 = Double.parseDouble(right.toString());
					k2 = 0;
				}else if(jb.getText().equals("+") || jb.getText().equals("-") || jb.getText().equals("*") || jb.getText().equals("/")){	
					right2 = Double.parseDouble(right.toString());
					fun();
					bool = jb.getText();
					right.delete(0, right.length());
				}
				if(jb.getText().equals("+") || jb.getText().equals("-") || jb.getText().equals("*") || jb.getText().equals("/")){
				}else{
					right.append(jb.getText());
				}

			}
			str.append(jb.getText());
			jtf.setText(str.toString());
			//---------------------------//
			if(jb.getText().equals("=")){
				String result3 = Double.toString(fun());
				jtf.setText(result3);
				result.delete(0, result.length());
				right.delete(0, right.length());
				str.delete(0, str.length());
				result2 = 0;
				right2 = 0;
				k1 = 0;
				k2 = 1;
			}
		}
	}
	public double fun(){
		if(bool.equals("+")){
			result2 += right2;
		}else if (bool.equals("-")) {
			result2 -= right2;
		}else if(bool.equals("*")){
			result2 *= right2;
		}else if(bool.equals("/")){
			result2 /= right2;
		}
		return result2;
	}

这里的监听器最开始是采用方法内部类写的,但是发现调用不了外部类里面定义的成员变量(不知道是方法不对还是怎么),然后就改用成员内部类写了

完整代码如下:

package my_counter;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class body{
	JFrame jframe = new JFrame();
	Container con = jframe.getContentPane();
	JButton b1 = new JButton("1");
	JButton b2 = new JButton("2");
	JButton b3 = new JButton("3");
	JButton b4 = new JButton("4");
	JButton b5 = new JButton("5");
	JButton b6 = new JButton("6");
	JButton b7 = new JButton("7");
	JButton b8 = new JButton("8");
	JButton b9 = new JButton("9");
	JButton b0 = new JButton("0");
	JButton b_multi = new JButton("*");
	JButton b_division = new JButton("/");
	JButton b_tip = new JButton(".");
	JButton b_equal = new JButton("=");
	JButton b_add = new JButton("+");
	JButton b_cut = new JButton("-");
	JButton temp = new JButton();
	//-------------------------------------//
	JPanel jp1 = new JPanel();
	JPanel jp2 = new JPanel();
	JTextField jtf = new JTextField(20);

	//创建字符串对象,用来使表达式能够完整的显示在文本框里
	StringBuffer str = new StringBuffer("");

	//实现运算逻辑所需要的变量		
	StringBuffer result=new StringBuffer("");        //用于存储左值(也是结果)和右值的累加值	
	StringBuffer right=new StringBuffer("");
	double result2;                //表达式左值,也是结果
	double right2;               //表达式右值
	String bool;             //存储运算符号
	int k1 = 0;          	//k1=0时为左值,k1=1时为中间的运算符号值,k1=2时为右值
	int k2 = 1;            //在最后输出结果的时候不让监听方法里面进入循环语句,k=1时可进入,k=0时不可进入

	//事件监听
	class jbAction implements ActionListener{
		JButton jb = new JButton();
		@Override
		public void actionPerformed(ActionEvent e) {
			jb = (JButton)e.getSource();
			if(k1 == 0 && k2 == 1){
				if(jb.getText().equals("+") || jb.getText().equals("-") || jb.getText().equals("*") || jb.getText().equals("/")){
					result2 = Double.parseDouble(result.toString());
					k1 = 1;
				}
				result.append(jb.getText());
			}
			if (k1 == 1 && k2 == 1) {
				bool = jb.getText();
				k1 = 2;
			}else if(k1 == 2 && k2 == 1){
				if(jb.getText().equals("=")){
					right2 = Double.parseDouble(right.toString());
					k2 = 0;
				}else if(jb.getText().equals("+") || jb.getText().equals("-") || jb.getText().equals("*") || jb.getText().equals("/")){	
					right2 = Double.parseDouble(right.toString());
					fun();
					bool = jb.getText();
					right.delete(0, right.length());
				}
				if(jb.getText().equals("+") || jb.getText().equals("-") || jb.getText().equals("*") || jb.getText().equals("/")){
				}else{
					right.append(jb.getText());
				}

			}
			//使表达式能够完整显示
			str.append(jb.getText());
			jtf.setText(str.toString());
			//---------------------------//
			if(jb.getText().equals("=")){
				String result3 = Double.toString(fun());
				jtf.setText(result3);
				result.delete(0, result.length());
				right.delete(0, right.length());
				str.delete(0, str.length());
				result2 = 0;
				right2 = 0;
				k1 = 0;
				k2 = 1;
			}
		}
	}
	//构造方法,画出身体
	body(){
		jframe.setTitle("my_counter");
		jframe.setVisible(true);
		jframe.setDefaultCloseOperation(jframe.EXIT_ON_CLOSE);
		jframe.add(jp1, BorderLayout.NORTH);
		jframe.setResizable(false);
		jframe.setLocation(800, 300);
		jp1.add(jtf);
		JButton bu[] = new JButton[] {b7, b8, b9, b_division, b4, b5, b6, b_multi, b1, b2, b3, b_add, b0, b_tip, b_equal, b_cut};
		for(int i=0; i<bu.length; i++) {
			bu[i].addActionListener(new jbAction());
			jp2.add(bu[i]);
		}
		jp2.setLayout(new GridLayout(4, 4));
		con.add(jp1, BorderLayout.NORTH);
		con.add(jp2, BorderLayout.SOUTH);
		jframe.pack();
	}

	public double fun(){
		if(bool.equals("+")){
			result2 += right2;
		}else if (bool.equals("-")) {
			result2 -= right2;
		}else if(bool.equals("*")){
			result2 *= right2;
		}else if(bool.equals("/")){
			result2 /= right2;
		}
		return result2;
	}		
}

public class counter{
	public static void main(String[] args) {
		body bd = new body();
	}
}

虽然做出来了,但还是有一些不足,此计算器基本的算术要求都可以满足,但在多项式的表达式里没有乘除的优先级运算,整个表达式都是顺序执行QAQ,如有指点的意见,欢迎留言√

【专栏导引贴】100+智能优化算法:从背景原理到代码实战(持续更新) 本专栏系统整理100+种现代优化算法,涵盖粒子群优化(PSO)、遗传算法(GA)、鲸鱼优化(WOA)等经典方法,以及白鲸优化(BWO)、非洲秃鹫优化(AVOA)等新兴算法。每篇详解包含生物启发原理、数学模型、代码实现及工程应用,采用统一编程风格,提供可直接运行的实例代码。专栏持续更新,旨在为研究者提供系统化的智能优化算法参考资料,实现从理论到实践的完整知识链。目前已收录23种算法,包括蚁群系统(ACS)、蝙蝠算法(BA)、天牛须搜索(BAS)等自然启发式优化方法。 阅读详情

相关推荐

IP2315高效同步降压充电IC在快充应用中的硬件与软件控制策略

本文深入解析IP2315高效同步降压充电IC在快充应用中的硬件与软件控制策略,涵盖其核心特性、硬件电阻调节技巧、I2C动态控制方案、散热设计优化及典型问题排查。IP2315支持多种快充协议,如Type-C PD、华为FCP等,适用于便携设备快速充电需求,并通过I2C实现灵活的充电参数设置,提升充电效率与安全性。

weixin_29248313的博客 539

java 简易计算器

java 简易计算器

m0_56078449的博客 2万+

Comsol 压电换能器声场仿真(远场分析、边界元法优化)

本文详细介绍了在Comsol中使用边界元法进行压电换能器远场声场仿真的高效方法。针对传统有限元法计算远场时内存消耗大、耗时长的问题,文章阐述了边界元法在处理无限域、提升计算效率和精确获取远场指向性方面的核心优势,并提供了从多物理场耦合设置、网格划分策略到求解器配置及结果验证的完整实战指南。

weixin_29045585的博客 405

Java课程设计——简易计算器

1.系统简介1.1设计背景随着人们物质生活水平的日益提高,人们对高质量的计算提出了更高的要求。当今世界,是云计算的生活和物联网发展和使用阶段,计算性能的高低和计算的效率直接影响到了人们的生活。对此,使用Java语言开发出一个为人们生活带来便利的计算器,主要完成对数据的高效计算。该系统实现了加、减、乘、除的四则运算。1.2开发工具及环境(1)开发工具及介绍Eclipse是Java集成...

陌然的博客 1万+

【近源攻击】badusb制作

BadUSB是利用伪造HID设备执行攻击载荷的一种攻击方式。HID(Human InterfaceDevice)设备通常指的就是键盘鼠标等与人交互的设备,用户插入BadUSB,就会自动执行预置在固件中的恶意代码。BadUsb插入后,会模拟键盘鼠标对电脑进行操作,通过这些操作打开电脑的命令终端,并执行一条命令,这条命令将从指定网址下载其他代码并于后台静默运行。这些代码功能包括:窃取信息、反弹shell、发送邮件等,从而实现控制目标机或者窃取信息的目的。

qinjilll的博客 2549

零停机更新黑科技:Spring Boot应用实现无缝升级的实战指南

本文介绍了基于Spring Boot和Tomcat实现零停机更新的技术方案,通过动态端口切换和优雅关闭机制,确保服务更新过程中业务不中断。文章详细解析了核心原理,包括内嵌Tomcat的工作机制、零停机更新的三大技术基石(端口动态切换、优雅关闭和进程接管)。同时提供了完整的Java实现代码,重点展示了端口动态检查、参数动态调整、旧进程优雅终止等关键逻辑。该方案适用于高可用系统升级场景,能够有效避免传统部署方式导致的服务中断问题,实现100%无感知的应用更新。

墨夶的博客 818

用Java制作简单的计算器

就是往左边判断是(sb.charAt(j)=='*'||sb.charAt(j)=='/'||sb.charAt(j)=='%'||sb.charAt(j)=='B'||sb.charAt(j)=='+'||sb.charAt(j)=='-'),而右边判断是(sb.charAt(j)=='*'||sb.charAt(j)=='/'||sb.charAt(j)=='%'||sb.charAt(j)=='B'||sb.charAt(j)=='+'||sb.charAt(j)=='-'||按钮,和自己本身框架。

充满焦虑的大学生 1万+

ResNet改进(50):SKConv和CBAM增强的ResNet模型

动态调整感受野大小- 结合通道和空间注意力模型的核心思想是在ResNet的每个残差块后插入这些注意力模块,使网络能够自适应地关注更重要的特征。模型的核心是类,它在标准ResNet34的基础上:替换了初始卷积层,使用更小的核(3×3)和步长(1)在每个残差块后选择性添加SKConv和CBAM模块# 加载预训练ResNet34# 自定义初始层# 添加注意力机制的残差层通过集成SKConv和CBAM,这个改进的ResNet模型能够更有效地捕捉多尺度特征并关注关键信息区域。

2401_82355416的博客 621

使用Java实现简单的计算器应用程序

通过本文的示例代码,我们学习了如何使用Java编程语言创建一个简单的计算器应用程序。我们使用了Swing库来创建GUI界面,并实现了基本的按钮点击事件处理和计算逻辑。然后,我们可以使用任何集成开发环境(IDE)如Eclipse或IntelliJ IDEA来创建一个新的Java项目。我们将使用面向对象的编程思想和基本的Java语法,以及图形用户界面(GUI)库Swing来创建一个交互式的计算器。在这个例子中,我们将使用Swing库来创建计算器的GUI界面。或者,我们可以使用命令行编译和运行Java代码。

Y18870954401的博客 2381

YOLO11改进|卷积篇|引入SPDConv

YOLO11中添加SPDConv卷积

A1983Z的博客 3696

计算机组成原理(第三版)唐朔飞-第六章计算机的运算方法-课后习题(17-32)

计算机组成原理(第三版)唐朔飞-第六章计算机的运算方法-课后习题(17-32)

weixin_45735391的博客 12万+

用java编写一个简单的计算器

用java实现简易计算器(加减乘除),运用switch语句

m0_74052176的博客 3600

光学系统仿真软件:OSLO_(13).衍射光学元件设计v1

目标函数是设计DOE的关键步骤之一。目标函数可以是一个具体的光强分布,也可以是一个特定的波前形状。在仿真软件中,目标函数通常用数学表达式或数据文件来定义。假设我们需要设计一个二元相位掩模,使其在特定位置生成三个焦点。我们可以定义一个目标函数来描述这三个焦点的光强分布。# 定义目标函数"""定义一个多焦点目标函数:param x: 横坐标:param y: 纵坐标:param z1: 第一个焦点的深度:param z2: 第二个焦点的深度:param z3: 第三个焦点的深度。

kkchenjj的博客 1003

用java实现简易计算器

用户可以点击数字按钮进行输入。 点击加、减、乘、除按钮选择运算符。 点击等于键计算结果。 点击清除键重置计算器状态。

2302_80289228的博客 2339

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

java简易计算器实现

java简易计算器实现(web) 一,web版 环境:tomcat8,jdk1.8,STS,java ee Java Web,是用Java技术来解决相关web互联网领域的技术栈。web包括:web服务端和web客户端两部分。Java在客户端的应用有Java Applet,不过使用得很少,Java在服务器端的应用非常的丰富,比如Servlet,JSP、第三方框架等等。Java技术对Web领域的发展注入了强大的动力。 Calculator_Interface.java package Pojo; /* *@a

qq_41607217的博客 4531

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

java实现简易计算器

一个简易计算器的java实现,采用的只是最基础的jbutton组件和相对应得监听事件以及BorderLayout和GridLayout两种布局方式。 package com.phoenix; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; impo

Phenixfate的专栏 907

java 计算器简易代码_java实现简易计算器完整代码

早晨起来没事,打开mac突然想写个小程序,就写来个简易的计算器,可以实现基本的运算,测试目前无bug,下面分享下自己的代码。首先写了个简单的界面如下:整个面板用了BorderLayout布局,分为北,左和中。中部采用网格布局。定义这个类为CalFrame.java:package calframe;import java.awt.BorderLayout;import java.awt.Color...

weixin_39699670的博客 1668

java实现简易计算器完整代码

早起起来没事,打开mac突然想写个小程序,就写来个简易的计算器,可以实现基本的运算,测试目前无bug,下面分享下自己的代码。 首先写了个简单的界面如下: 整个面板用了BorderLayout布局,分为北,左和中。中部采用网格布局。定义这个类为CalFrame.java: package calframe; import java.awt.BorderLayout; import j

数据小孩 12万+

用Java实现简易计算器

计算器 Java实现代码 package New; import java.util.Scanner; public class Calculator { public double add(double a, double b) { return a + b; } // 减法 public double sub(double a, double b) { return a - b; } // 乘法 ...

pzl1974的博客 2万+

用Java的swing组件实现简易计算器

本文记录了笔者的第一个Java程序,基于Java抽象窗口工具(abstract window toolkit , AWT)和Swing(Swing属于Java Foundation Classes的一部分)实现的建议计算器,由于笔者经验有限,初学Java,代码略带bug,无法实现7+5×8之类式子的计算,只能实现算术运算符按从高到低的式子运算,部分代码略显冗杂,希望大家在评论区积极讨论完善代码! 计算器示意图 一、代码相关知识简介 JFrame(框架) 使用JFrame frame = new

hailuorou的博客 2757

Java课设-百行代码实现简易计算器

Java程序设计 工程实践——简易计算器的设计院、 系 计算机与软件学院 专业 信息安全 姓 名 指导教师2022年 6 月 11 日目录: 一、 设计简介 2 1、 设计背景 2 2、 开发工具及环境 2 (1)开发工具及介绍 2 (2)开发环境 2 二、 相关工作 2 1、设计基础 2 2、功能需求 2 3、系统设计 3 三、 设计原理 3 1、包和类的说明 3 2、简易计算器的源代码清单 3 四、 实现结果 6 1、程序界面 6 2、测试用例 7 3、运行结果 7 五、 设计心得 9一、

qq_57150526的博客 1万+

java:实现简易计算器工具(附带源码)

java:实现简易计算器工具(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 2055

Java实现一个简易的计算器

Java实现一个简易的计算器 用到的部分API: Double.parseDouble(String a); 将字符串a转化成对应的Double类型并返回,但字符串a中不能包含除数字与小数点以外的字符 例: Double d = Double.parseDouble(“12.34”); 如上做以后,变量d的值为12.34 String.charAt(int a); 取字符串中索引a处的ch...

诡白丷的博客 1952

java实现简易计算器系统

设计程序,实现简易计算器欢迎使用>>> 计算器

qq_52403060的博客 192
上一篇: Java环境变量
下一篇: Java实现图形化界面的日历
SSSuperbeyond
博客等级 码龄8年 22粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值