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,如有指点的意见,欢迎留言√

Windows下快速搭建MSYS2开发环境(含GCC与MinGW配置) 本文详细介绍了在Windows系统下快速搭建MSYS2开发环境的完整流程。通过使用pacman包管理器,可以便捷地安装GCC编译器与MinGW-w64工具链,并配置系统环境变量。文章还涵盖了从基础安装、系统更新到编译开源项目的实战指南,帮助开发者高效构建原生Windows程序,显著提升C/C++开发效率。 阅读详情

相关推荐

revit二次开发环境搭建(2024版)(小白友好)

revit二次开发环境配置,SDK、addin manager和lookup新手友好安装教程

m0_56961251的博客 1420

java 简易计算器

java 简易计算器

m0_56078449的博客 2万+

【Linux】实际项目应该如何完成?--安防监控系统项目的总结

到目前为止我也做个5、6个嵌入式项目,但以往都是从零开始自己做,也就是毫无计划,想到那里做那里,有想法就会去实现,就这样导致我碰到了很多坑,也消耗了我许多时间,当然,不是说这样不好,因为在其中我也得到了一个很好的锻炼与练习,但是这不适用于在工作中去这样做。...

修成真的博客 6729

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

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

陌然的博客 1万+

【初阶】手把手教你轻松上手Denodo | 连接数据库并创建基本视图 (二)

在本教程的第二部分,我们将涵盖:连接到数据库,与创建基本视图。

Denodo的博客 1106

STM32F429移植LVGL9.3.0:从源码配置到双缓冲优化实战

本文详细介绍了如何在STM32F429平台上移植LVGL 9.3.0图形库,涵盖从源码准备、工程配置、显示驱动适配到双缓冲优化等关键步骤。重点解析了利用STM32F429的硬件特性实现高效内存管理和流畅显示性能的实战技巧,为嵌入式GUI开发提供完整解决方案。

q6r7s8t9的博客 1135

用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万+

HPC软件使用之ANSYS Fluent

本文介绍了如何在超级计算机上使用ANSYS Fluent进行科学计算和工程仿真。文章首先对Fluent软件进行了简要介绍,强调了其在计算流体力学领域的广泛应用和强大功能。接着,详细说明了如何编写jou脚本文件和slurm脚本文件,以控制Fluent的计算流程和作业提交。文章还提供了作业提交和查看的具体命令,并通过一个鼓风机仿真的案例演示了从网格模型准备、脚本编写、作业提交到结果查看的完整流程。最后,展示了使用Fluent进行结果可视化的方法。

欢迎各位大佬光临“寒舍”!请多多指点,共同进步! 2212

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

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

Y18870954401的博客 2381

零基础做完YOLOv8船只检测系统:HRSC2016数据集 + 完整UI,稳过答辩

亲爱的同学,通过这篇教程,你已经掌握了“基于YOLOv8的HRSC2016微小船只检测系统”从数据集处理、模型训练到Tkinter界面开发的全流程。这个课题既贴合“海事智能化”的产业战略,又涵盖了“目标检测、深度学习、界面开发”等多个毕设评分点,非常适合作为计算机或海事工程专业的毕业设计。在实践中,你可能会遇到“海面背景复杂导致船只漏检”“微小船只识别精度不足”“UI与模型推理同步卡顿”等挑战——别担心,这些都是技术成长的必经之路。

FJN110的博客 108

NOC总线架构拓扑介绍

在开篇里,我们对芯片PPA有了初步的认识。下面,让我们从访存这个简单的问题开始展开介绍芯片基础概念。CPU是怎样访问内存的?简单的答案是,CPU执行一条访存指令,把读写请求发往内存管理单元。内存管理单元进行虚实转换,把命令发往总线。总线把命令传递给内存控制器,内存控制器再次翻译地址,对相应内存颗粒进行存取。之后,读取的数据或者写入确认按照原路返回。再复杂些,当中插入多级缓存,在每一层缓存都未命中的情况下,访问才会最终达到内存颗粒。

元直的博客 5296

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

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

m0_74052176的博客 3600

51、基于深度卷积神经网络的自闭症分类研究

本研究提出了一种基于深度卷积神经网络的自闭症分类方法,通过融合VGGNet-19和ResNet-52模型的特征,并在决策层采用SVM分类器,实现了对自闭症谱系障碍(ASD)和典型发育(TD)个体的准确区分。研究使用ABIDE数据集,结合数据增强和特征拼接技术,取得了88.12%的分类准确率和0.88的ROC曲线下面积。结果表明,该方法在自闭症自动诊断中具有良好的性能,同时研究也探讨了其局限性,并展望了未来改进方向,如多模态数据融合、迁移学习和模型可解释性的提升。

grpc6streamer的博客 130

用java实现简易计算器

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

2302_80289228的博客 2339

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java实现简易计算器

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

Phenixfate的专栏 908

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

weixin_39699670的博客 1669

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:实现简易计算器工具(附带源码)

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

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、付费专栏及课程。

余额充值