JAVA简易计算器

这篇具有很好参考价值的文章主要介绍了JAVA简易计算器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、功能描述

1.C是清除键,功能是将之前所输入的数字、计算结果等信息全部归零

2.CE,清除当前输入的数据或符号

3.单击MS存储当前显示值,可以理解为放到存储区

4.单击MC清除存储区数值

5.单击MR将存储区数据显示到屏幕上

6.M+:当前显示的数与存储区的数相加

7.M-:当前显示的数与存储区的数相减

二、整体思路

首先对于图形显示上,底层容器采用边界布局在边界的北方和中间分别加入了两个面板。一个采用流式布局的面板添加了一个文本框,一个采用了6*5网格布局的面板添加了很多按钮。

具体实现上,对于按钮,我分成了num数字键和function功能键。创建对象时,这块代码太过冗长便把这一部分整体写成一个surface()函数。函数实现了文本框、按钮、面板的创建,菜单条的创建,同时将文本框、按钮都添加到面板中,菜单添加到菜单条中等。另外,设置了一个str字符串数组,实现存储两个操作数、操作符、暂时存储计算结果、寄存器。设置了一个布尔类型变量标志第一个数是否存在。register()函数实现对文本框、按钮注册监视器。

整体代码思想使用了getActionCommand()函数读取命令。再通过字符串函数equal()函数判断是什么符号,之后对不同符号采取不同的操作。以加法为例,通过equal函数进入到加法的分支语句,首先读取文本框内容作为第一个操作数,将字符串存入str[0],再将操作符加号存入str[1],将标志位flag1设置成true,表示存在第一个数据。文本框清空,输入第二个数据,单击“=”按钮。进入等于的分支语句,“=”按钮中对操作码进行了讨论,若为单目运算(百分数、开根号等),一个操作数即可运算;若为双目运算,需要先读取文本框的内容作为第二个操作数,存入str[2],若第一个操作数存在,两个操作数做操作码的运算,将结果存入str[4]。若第一个数据不存在,文本框输出“错误输入!”

三、具体实现代码

package sohu;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class calculate extends JFrame implements ActionListener{
    JPanel jp1,jp2;//两个面板,一个放文本框,一个放按钮
    JButton num[],function[];//数字键num,功能键function
    JTextField jtf1;//文本框
    JMenuBar jm;//菜单条
    JMenu jmi1,jmi2,jmi3;//菜单
    private String[] str={"","","","","",""};
    //str[0]:第一个数  str[1]:运算符 str[2]:第二个数
    //str[3]:MS str[4]:缓存存入MS的数
    private boolean flag1=false;//是否写入第一个数
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		calculate win=new calculate();
	}
	void surface(){//计算器界面
		num=new JButton [10];//数字键
		for(int i=0;i<num.length;i++){
			num[i]=new JButton(""+i);
			num[i].setFont(new Font("黑体", Font.BOLD, 30));
		}
		function=new JButton [18];//功能键
		function[0]=new JButton("MC");//清除存储区中的数值
		function[0].setFont(new Font("黑体", Font.BOLD, 30));
		function[1]=new JButton("MR");//将存储区的数显示到显示栏中
		function[1].setFont(new Font("黑体", Font.BOLD, 30));
		function[2]=new JButton("MS");//存储当前显示的值
		function[2].setFont(new Font("黑体", Font.BOLD, 30));
		function[3]=new JButton("M+");//当前显示的数与存储区的数相加
		function[3].setFont(new Font("黑体", Font.BOLD, 30));
		function[4]=new JButton("M-");//当前显示的数与存储区的数相减
		function[4].setFont(new Font("黑体", Font.BOLD, 30));
		function[5]=new JButton("←");//删除
		function[5].setFont(new Font("黑体", Font.BOLD, 30));
		function[6]=new JButton("CE");//清除当前输入的数据或符号  存储区内容不变
		function[6].setFont(new Font("黑体", Font.BOLD, 30));
		function[7]=new JButton("C");//将之前输入
		function[7].setFont(new Font("黑体", Font.BOLD, 30));
		function[8]=new JButton("±");//同时输出加和减
		function[8].setFont(new Font("黑体", Font.BOLD, 30));
		function[9]=new JButton("√");//求平方根
		function[9].setFont(new Font("黑体", Font.BOLD, 30));
		function[10]=new JButton("/");//除
		function[10].setFont(new Font("黑体", Font.BOLD, 30));
		function[11]=new JButton("%");//百分数
		function[11].setFont(new Font("黑体", Font.BOLD, 30));
		function[12]=new JButton("*");//乘
		function[12].setFont(new Font("黑体", Font.BOLD, 30));
		function[13]=new JButton("1/x");//取倒数
		function[13].setFont(new Font("黑体", Font.BOLD, 30));
		function[14]=new JButton("-");//减
		function[14].setFont(new Font("黑体", Font.BOLD, 30));
		function[15]=new JButton("+");//加
		function[15].setFont(new Font("黑体", Font.BOLD, 30));
		function[16]=new JButton(".");//小数点
		function[16].setFont(new Font("黑体", Font.BOLD, 30));
		function[17]=new JButton("=");//等于
		function[17].setFont(new Font("黑体", Font.BOLD, 30));
		jp1=new JPanel();
		jp2=new JPanel();
		jtf1=new JTextField(30);//文本框
		jtf1.setFont(new Font("黑体", Font.BOLD, 30));
		this.setLayout(new BorderLayout());//底层容器采用边界布局
		jp1.setLayout(new FlowLayout());//存放文本框的面板采用流布局
		jp1.add(jtf1);//文本框
		jp2.setLayout(new GridLayout(6,5));//存放按钮的面板采用网格布局6*5
		//向面板中添加按钮
		for(int i=0;i<10;i++){
		  jp2.add(function[i]);
		}
		jp2.add(num[7]);
		jp2.add(num[8]);
		jp2.add(num[9]);
		jp2.add(function[10]);//除
		jp2.add(function[11]);//百分数
		jp2.add(num[4]);
		jp2.add(num[5]);
		jp2.add(num[6]);
		jp2.add(function[12]);//乘
		jp2.add(function[13]);//取倒数
		jp2.add(num[1]);
		jp2.add(num[2]);
		jp2.add(num[3]);
		jp2.add(function[14]);//减
		jp2.add(new JButton());//空
		jp2.add(num[0]);
		jp2.add(new JButton());//空
		jp2.add(function[16]);//小数点
		jp2.add(function[15]);//加
		jp2.add(function[17]);//等于
		//设置菜单条
		jm=new JMenuBar();
	    jmi1=new JMenu ("查看(V)");
	    jmi2=new JMenu ("编辑(E)");
	    jmi3=new JMenu ("帮助(H)");
	    //向菜单条中添加菜单
	    jm.add(jmi1);
	    jm.add(jmi2);
	    jm.add(jmi3);
	    this.setJMenuBar(jm);//将菜单条加到容器中
		this.add(jp1,BorderLayout.NORTH);//添加文本框面板
		this.add(jp2,BorderLayout.CENTER);//添加按钮面板
	}
	void register(){//注册监视器
		for(int i=0;i<num.length;i++){
			num[i].addActionListener(this);
		}
		for(int i=0;i<function.length;i++){
			function[i].addActionListener(this);
		}
		jtf1.addActionListener(this);
	}
	calculate(){
		surface();//外观设置
		register();//注册监视器
		//基本属性设置
		this.setTitle("计算器");
  	  	this.setSize(600,600);
  	  	this.setLocation(300,300);
  	  	this.setVisible(true);
  	  	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		String ss=e.getActionCommand();//读命令
		//判断命令
		if(ss.equals("MC")){
			str[3]="0";
		}
		else if(ss.equals("MR")){
			jtf1.setText("");//文本框清空
			jtf1.setText(str[3]);//将缓冲区数值输出到文本框中
		}
		else if(ss.equals("MS")){
			str[3]=jtf1.getText();//将暂缓的str[4]存到寄存器中
		}
		else if(ss.equals("M+")){//数据与str[3]做加法
			double a=Double.parseDouble(str[3]);
			str[4]=jtf1.getText();
			double b=Double.parseDouble(str[4]);
			str[3]=""+(a+b);//将结果转为字符串,存入str[3]
			str[4]=str[3];
			jtf1.setText("");
			jtf1.setText(str[3]);
		}
		else if(ss.equals("M-")){//数据与str[3]做减法
			double a=Double.parseDouble(str[3]);
			str[4]=jtf1.getText();
			double b=Double.parseDouble(str[4]);
			str[3]=""+(b-a);//将结果转为字符串,存入str[3]
			str[4]=str[3];
			jtf1.setText("");
			jtf1.setText(str[3]);
		}
		else if(ss.equals("←")){//删除当先数据的一位
			str[4]=jtf1.getText();
			if(str[4].length()==0) 
				jtf1.setText("");
			else{
				str[4]=str[4].substring(0,str[4].length()-1);
				jtf1.setText(str[4]);
			}
		}
		else if(ss.equals("CE")){//清空当前输入文本框内容  
			jtf1.setText("");
		}
		else if(ss.equals("C")){
			str[0]=str[1]=str[2]=str[4]="";//清空所有数据和符号
			jtf1.setText("");
		}
		else if(ss.equals("±")){//同时计算加法和减法
			str[0]=jtf1.getText();
			if(str[0].length()==0) {
				jtf1.setText("错误输入!");
			}
			else{
				str[1]="±";
				flag1=true;
				jtf1.setText("");
			}
		}
		else if(ss.equals("√")){//开根号
			str[1]="√";
		}
		else if(ss.equals("/")){//除法
			str[0]=jtf1.getText();
			if(str[0].length()==0) {
				jtf1.setText("错误输入!");
			}
			else{
				str[1]="/";
				flag1=true;
				jtf1.setText("");	
			}
		}
		else if(ss.equals("%")){//求百分数
			str[0]=jtf1.getText();
			if(str[0].length()==0) {
				jtf1.setText("错误输入!");
			}
			else{
				str[1]="%";
				flag1=true;
				jtf1.setText("");	
			}
		}
		else if(ss.equals("*")){//乘法
			str[0]=jtf1.getText();
			if(str[0].length()==0) 
				jtf1.setText("错误输入!");
			else{
				str[1]="*";
				flag1=true;
				jtf1.setText("");
			}
		}
		else if(ss.equals("1/x")){//除法
			str[0]=jtf1.getText();
			double a=Double.parseDouble(str[0]);
			if(a==0) 
				jtf1.setText("0不能做除数");
			else{
				jtf1.setText(""+1/a);
			}
		}
		else if(ss.equals("-")){//减法
			str[0]=jtf1.getText();
			if(str[0].length()==0) 
				jtf1.setText("错误输入!");
			else{
				str[1]="-";
				flag1=true;
				jtf1.setText("");
			}
		}
		else if(ss.equals("+")){//加法
			str[0]=jtf1.getText();
			if(str[0].length()==0) 
				jtf1.setText("错误输入!");
			else{
				str[1]="+";
				flag1=true;
				jtf1.setText("");
			}
		}
		else if(ss.equals("=")){//输出最后结果
			//单目运算
			if(str[1]=="√"){
				str[0]=jtf1.getText();
				double a=Double.parseDouble(str[0]);
				if(a<0) {
					jtf1.setText("错误输入!");
				}
				else
					jtf1.setText(""+Math.sqrt(a));
			}
			else if(str[1].equals("1/x")){
				str[0]=jtf1.getText();
				double a=Double.parseDouble(str[0]);
				if(a==0) 
					jtf1.setText("0不能做除数");
				else{
					jtf1.setText(""+1/a);
				}
			}
			else if(str[1].equals("%")){
				if(flag1){
					double a=Double.parseDouble(str[0]);
					a*=0.01;
					str[4]=str[0];
					jtf1.setText(""+a);
				}
				else
					jtf1.setText("错误输入");
			}
			//双目运算
			else if(str[1].equals("+")){
				str[2]=jtf1.getText();
				if(flag1==true){//第一个数据是否存在
					double a=Double.parseDouble(str[0]);
					double b=Double.parseDouble(str[2]);
					str[4]=""+(a+b);//暂时保留结果
					jtf1.setText(str[4]);
				}
				else{
					jtf1.setText("错误输入!");
				}
			}
			else if(str[1].equals("-")){
				str[2]=jtf1.getText();
				if(flag1==true){//第一个数据是否存在
					double a=Double.parseDouble(str[0]);
					double b=Double.parseDouble(str[2]);
					str[4]=""+(a-b);//暂时保留结果
					jtf1.setText(str[4]);
				}
				else{
					jtf1.setText("错误输入!");
				}
			}
			else if(str[1].equals("*")){
				str[2]=jtf1.getText();
				if(flag1==true){//第一个数据是否存在
					double a=Double.parseDouble(str[0]);
					double b=Double.parseDouble(str[2]);
					str[4]=""+(a*b);//暂时保留结果
					jtf1.setText(str[4]);
				}
				else{
					jtf1.setText("错误输入!");
				}
			}
			else if(str[1].equals("/")){
				str[2]=jtf1.getText();
				if(flag1==true){//第一个数据是否存在
					double a=Double.parseDouble(str[0]);
					double b=Double.parseDouble(str[2]);
					if(b==0){//0不可以作为除数
						jtf1.setText("0不能作为除数");
					}
					else{
						str[4]=""+(a/b);//暂时保留结果
						jtf1.setText(str[4]);
					}
				}
				else{
					jtf1.setText("错误输入!");
				}
			}
			else if(str[1].equals("±")){//同时输出加法和减法
				str[2]=jtf1.getText();
				if(flag1==true){//第一个数据是否存在
					double a=Double.parseDouble(str[0]);
					double b=Double.parseDouble(str[2]);
						str[4]=""+(a+b)+"&"+(a-b);//暂时保留结果,将结果存入str[3]无意义
						jtf1.setText(str[4]);
					flag1=false;
				}
				else{
					jtf1.setText("错误输入!");
				}
			}
		}
		//在文本框显示数字
		else if(ss.equals("0")){
			jtf1.setText(jtf1.getText()+"0");
		}
		else if(ss.equals("1")){
			jtf1.setText(jtf1.getText()+"1");
		}
		else if(ss.equals("2")){
			jtf1.setText(jtf1.getText()+"2");
		}
		else if(ss.equals("3")){
			jtf1.setText(jtf1.getText()+"3");
		}
		else if(ss.equals("4")){
			jtf1.setText(jtf1.getText()+"4");
		}
		else if(ss.equals("5")){
			jtf1.setText(jtf1.getText()+"5");
		}
		else if(ss.equals("6")){
			jtf1.setText(jtf1.getText()+"6");
		}
		else if(ss.equals("7")){
			jtf1.setText(jtf1.getText()+"7");
		}
		else if(ss.equals("8")){
			jtf1.setText(jtf1.getText()+"8");
		}
		else if(ss.equals("9")){
			jtf1.setText(jtf1.getText()+"9");
		}
	}
}

四、运行截图

整体界面:

JAVA简易计算器

 开根号:

JAVA简易计算器JAVA简易计算器

加减法:

 2±3

JAVA简易计算器

 MS将5263存入寄存器,MR显示出来

JAVA简易计算器JAVA简易计算器

 25与寄存器中的520相加

JAVA简易计算器 JAVA简易计算器

 “<-”

 JAVA简易计算器JAVA简易计算器

 52的百分数

JAVA简易计算器

其余功能不在这一一展示了。 

五、代码不足

        代码仍存在很多问题,例如小数点没有实现,显示“错误输入!”后如果想要重新输入数据必须先单击一下“CE”按钮或“C”按钮,不然数据会跟到“错误输入!”字符串后面,会影响之后的功能。单击清除之后不会有问题。文章来源地址https://www.toymoban.com/news/detail-493358.html

到了这里,关于JAVA简易计算器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    1.系统简介 1.1设计背景     随着人们物质生活水平的日益提高,人们对高质量的计算提出了更高的要求。当今世界,是云计算的生活和物联网发展和使用阶段,计算性能的高低和计算的效率直接影响到了人们的生活。对此,使用Java语言开发出一个为人们生活带来便利的计算

    2024年02月08日
    浏览(33)
  • Java课设-百行代码实现简易计算器

    Java程序设计 工程实践 ——简易计算器的设计 院、 系 计算机与软件学院 专业 信息安全 姓 名 指导教师 2022年 6 月 11 日 目录: 一、 设计简介 2 1、 设计背景 2 2、 开发工具及环境 2 (1)开发工具及介绍 2 (2)开发环境 2 二、 相关工作 2 1、设计基础 2 2、功能需求 2 3、系统

    2024年02月04日
    浏览(65)
  • JAVA课程设计——GUI实现简易计算器

    一.设计任务及要求 任务:设计并实现一个计算器小程序 要求: 使用图形用户界面 能在键盘或鼠标上读入数据,并完成加,减,乘,除计算。 在屏幕上显示一个主菜单。 提示用户输入相应的数字键,分别执行加,减,乘,除计算功能和结束程序的功能。 二.需求分析: ​ 计算

    2024年02月12日
    浏览(29)
  • 简易计算器-课后程序(JAVA基础案例教程-黑马程序员编著-第十一章-课后作业)

    【案例11-2】 简易计算器 【案例介绍】 1. 案例描述 本案例要求利用Java Swing 图形组件开发一个可以进行简单的四则运算的图形化计算器。 2. 运行结果 运行结果   【案例分析】 要制作一个计算器,首先要知道它由哪些部分组成,如下图所示: 一个简单的图形化界面计算器,

    2024年02月03日
    浏览(25)
  • QT 简易计算器

    2024年02月09日
    浏览(31)
  • C# 制作简易计算器

    前言:环境是vs 2022 1、打开vs2022后,右边导航栏选择创建新项目。  2、选择Windows窗体应用(.net  Framework)  3、进入配置新项目界面(项目名称和位置可自行修改)点击创建  4、窗体From1即为我们要要编辑的位置  5、在窗体中添加对应的工具 6、并在对应的属性窗口为其修改

    2024年02月08日
    浏览(37)
  • MFC基于对话框——仿照Windows计算器制作C++简易计算器

    目录 一、界面设计 二、设置成员变量 三、初始化成员变量  四、初始化对话框 ​五、添加控件代码 1.各个数字的代码(0~9) 2.清除功能的代码 3.退格功能的代码 4.加减乘除功能的代码 5.小数点功能的代码 6.正负号功能的代码 7.等于功能的代码 六、源码领取方式 制作好之后

    2024年02月05日
    浏览(39)
  • C++简易计算器的实现

    定义: 计算器是近代人发明的可以进行数字运算的机器。 也就是说,计算器不等同于算盘,前者能自行运算,后者只能简便计算过程,在古代,人们发明了许多计算工具,如算筹、算盘、计算尺等,随着社会的发展和科技的进步,计算工具也经历了由简单到复杂,由低级向高级的发

    2024年02月11日
    浏览(32)
  • 前端——编写一个简易网页计算器

    如下图效果所示,输入两个运算数,点击不同的运算符,会在下方得到不同的运算结果 分析与代码实现 在HTML部分,定义了一个标题为\\\"网页计算器\\\"的网页,并创建了两个输入框和四个按钮。最后,创建了一个只读的结果显示框,便于计算结果的输出 在JavaScript部分,定义了一

    2024年01月24日
    浏览(42)
  • 微信小程序-简易计算器

    微信小程序-简易计算器,满足日常所用的的加减乘除计算 一、前期准备工作 软件环境:微信开发者工具 官方下载地址:微信开发者工具下载地址与更新日志 | 微信开放文档 1、基本需求。 简易计算器 满足日常所用的的加减乘除计算 带历史记录,查看过往计算 2、案例目录结构

    2024年02月04日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包