java简易计算器的设计

news2024/9/20 18:38:32

简易计算器的设计

1.1实训内容

模仿Windows自带的标准版计算器,设计并用Java语言实现简易的计算器(根据自己的能力,可以适当地增加或删除部分功能)。
最低要求
计算器运行界面如下图所示,包含二个文本框(分别显示算式和运算结果)、10个数字按钮(0~9)、4个运算按钮、一个等号按钮、一个清除按钮,要求将按键和结果显示在文本框中。
在这里插入图片描述

1.2 源代码

package 实训;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.SwingConstants;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Font;
import java.awt.Color;
public class Calculator extends JFrame implements ActionListener {
	    // 第一行:计算式
		private JTextField expText = new JTextField();
		// 第二行:计算结果,设初始值为0
		private JTextField resultText = new JTextField("0");
		private String num1="",num2="";//两个操作数
		private String fh=""; //运算符
		private double r; //计算结果
		// 构造方法
		public Calculator() {
			// 调用父类的构造函数
			super("计算器");
			//各个按钮上的文字
			String[] keysValue= { "7", "8", "9", "÷", "4", "5", "6",
					"×", "1", "2", "3", "-", "0","CE", "+","=" };
			//各个按钮上的动作命令标识
			String[] actionCmd= { "7", "8", "9", "/", "4", "5", "6",
					"*", "1", "2", "3", "-", "0","CE", "+","=" };
			JButton keys[]=new JButton[keysValue.length];
			Font font=new Font("宋体",Font.PLAIN,18);
			//设置计算式文本框的位置为(10,10),宽为:240,高为:40
			expText.setBounds(10, 10, 240, 40);
			expText.setFont(font);
			expText.setBackground(Color.white);
			expText.setEditable(false);// 计算式不能修改
			//设置计算结果文本框的大小
			resultText.setBounds(10, 50, 240, 40);
			resultText.setFont(font);
			resultText.setBackground(Color.white);
			//设置文本框的对齐方式:右对齐
			resultText.setHorizontalAlignment(SwingConstants.RIGHT);
			resultText.setEditable(false);// 计算结果不能修改
			// 设置窗口布局
			this.setLayout(null);
			this.add(expText);  // 将计算式文本框添加到窗口中
			this.add(resultText);// 将计算结果文本框添加到窗口中
			// 放置按钮
			int x=10,y=100;
			for (int i=0;i<keysValue.length;i++) {
				keys[i]=new JButton();
				keys[i].setText(keysValue[i]);
				keys[i].setActionCommand(actionCmd[i]);
				keys[i].setBounds(x,y,60,45);
				keys[i].setFont(font);
				if(x<=130) {
					x+=60;
				} else {
					x=10;
					y+=50;
				}
				this.add(keys[i]);
			}
			// 给每个按钮添加监听
			for (int i=0;i<keysValue.length;i++) {
				keys[i].addActionListener(this);
			}
			// 窗口大小不能修改
			this.setResizable(false);
			// 设置窗口大小
			this.setSize(270, 350);
			//设置窗口的相对位置,位于屏幕中央
			this.setLocationRelativeTo(null);
			//设置窗口的关闭操作:直接关闭
			this.setDefaultCloseOperation(EXIT_ON_CLOSE);
			this.setVisible(true); // 设置窗口可见
			
		}
		
		//计算
		public void result(String z) {
	        if(z.equals("+"))
	            r=Double.parseDouble(num1)+Double.parseDouble(num2);
	        if(z.equals("-"))
	            r=Double.parseDouble(num1)-Double.parseDouble(num2);
	        if(z.equals("*"))
	            r=Double.parseDouble(num1)*Double.parseDouble(num2);
	        if(z.equals("/"))
	            r=Double.parseDouble(num1)/Double.parseDouble(num2);
	        num1=Double.toString(r);
	        //将结果显示在文本框resultText中
	        resultText.setText(num1);
	        //算完后将  数2  和  运算符 清空
	        num2="";
	        fh="";
	    }
	    
	    public void actionPerformed(ActionEvent e)throws IndexOutOfBoundsException{
	        //e.getActionCommand()得到的是组件对象上的字符串
	    	String cmd=e.getActionCommand();
	        if(cmd.equals("0")||cmd.equals("1")||cmd.equals("2")||cmd.equals("3")
	        	||cmd.equals("4")||cmd.equals("5")||cmd.equals("6")
	        	||cmd.equals("7")||cmd.equals("8")||cmd.equals("9")) {
	            if(fh.equals("")) {
	            	num1+=cmd;
	                expText.setText(num1);
	            }
	            else { 
	            	num2+=cmd;
	                expText.setText(num1+fh+num2);
	            }
	        }
	        //运算
	        if(cmd.equals("+")) {
	            if(fh!="")
	                result(fh);//调用result函数计算结果,并将结果显示在文本框resultText中
	            fh="+";
	            //在计算式文本框中显示第一个数和符号
	            expText.setText(num1+fh);
	        }
	        if(cmd.equals("-")) {
	            if(fh!="")
	                result(fh);
	            fh="-";
	            expText.setText(num1+fh);
	        }
	        if(cmd.equals("*")) {
	            if(fh!="")
	                result(fh);
	            fh="*";
	            expText.setText(num1+fh);
	        }
	        if(cmd.equals("/")) {
	            if(fh!="")
	                result(fh);
	            fh="/";
	            expText.setText(num1+fh);
	        }
	        if(cmd.equals("=")) {
	            result(fh);
	        }
	     // "CE"键清空数据
	        if(cmd.equals("CE")) {
	        	num1="";
	        	num2="";
	            fh="";
	            expText.setText("");
	            resultText.setText("0");
	        }
	    }
	    public static void main(String[] args) {
			// TODO Auto-generated method stub
			new Calculator();
		}
	}



1.3 测试结果

在这里插入图片描述

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

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

相关文章

Android Binder通信原理(七):java 下的C-S

源码基于&#xff1a;Android R 0. 前言 在之前的几篇博文中&#xff0c;对Android binder 的通信原理进行的深入的剖析&#xff0c;这些博文包括&#xff1a;binder 简介、servicemanager启动、service注册、service获取、Java 端的service 注册和获取。 在前一文中&#xf…

PostgreSQL处理JSON数据

源&#xff1a;https://blog.csdn.net/c_zyer/article/details/130968257?ops_request_misc&request_id&biz_id102&utm_termPostgreSQL%20%E7%9A%84JSON%20%E5%A4%84%E7%90%86&utm_mediumdistribute.pc_search_result.none-task-blog-2allsobaiduweb~default-…

pgsql:纵列字段转为横列字段

问题&#xff1a; 想要将查询出来的数据纵列字段转为横列字段。如以下是24小时内每个小时的数据表&#xff1a; SELECT deviceid,press_avg, hh FROM site_data 想要转换后的效果如下&#xff0c;将24小时内所有数据横向展示&#xff1a; 解决方案&#xff1a; 实现的sql查询…

Spring事务的介绍和使用

目录 一、Spring事务作用 二、代码实现 三、Spring事务相关配置 1、事务配置 2、事务传播行为 一、Spring事务作用 事务作用&#xff1a;在数据层保障一系列的数据库操作同成功同失败 Spring事务作用&#xff1a;在数据层或业务层保障一系列的数据库操作同成功同失败 二、…

分散输入和集中输出(Scatter-Gather I/O):readv()和writev()

readv()和writev()系统调用分别实现了分散输入和集中输出的功能。 NAMEreadv, writev, preadv, pwritev - read or write data into multiple buffersSYNOPSIS#include <sys/uio.h>ssize_t readv(int fd, const struct iovec *iov, int iovcnt);ssize_t writev(int fd, c…

蓝桥杯专题-试题版-【数字游戏】【城市建设】【最大子阵】【蚂蚁感冒】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

数字人解决方案——基于真人视频的三维重建数字人源码与训练方法

前言 1.真人视频三维重建数字人源码是基于NeRF改进的RAD-NeRF&#xff0c;NeRF&#xff08;Neural Radiance Fields&#xff09;是最早在2020年ECCV会议上的Best Paper&#xff0c;其将隐式表达推上了一个新的高度&#xff0c;仅用 2D 的 posed images 作为监督&#xff0c;即…

MongoDB存储引擎

1、前言 存储引擎是数据库的组成部分&#xff0c;负责管理数据存储。 MongoDB支持的以下存储引擎&#xff1a; 存储引擎 描述 WiredTiger存储引擎 从MongoDB 3.2开始默认的存储引擎&#xff0c;新的版本MongoDB推荐使用WiredTiger存储引擎。 MMAPv1存储引擎 MMAPv1是Mon…

微信小程序使用vant组件样式未生效解决办法

1.删除小程序自带的样式 首先在app.json里面删除这一行 2.清除缓存 重新编译 3.重新构建npm 重新编译 在工具里面

nginx之rewrite

一、Rewrite跳转的场景二、Rewrite跳转实现三、Rewrite实际场景四、常用的 Nginx 正则表达式五、Rewrite命令、语法格式六、location的分类七、location的优先级八、rewrite与location的区别九、rewrite示例9.1 基于域名的跳转9.2 基于客户端 IP 访问跳转9.3 基于旧域名跳转到新…

chatgpt赋能python:Python迭代运算:概述、应用及效果分析

Python迭代运算&#xff1a;概述、应用及效果分析 在Python编程领域中&#xff0c;迭代运算是一项基础性操作。它不仅适用于循环遍历数据&#xff0c;还支持函数式编程中的高阶函数应用&#xff08;例如map、filter等&#xff09;。本文将从多个方面探讨Python迭代运算的应用和…

高性能计算开发软件培训班-选猿代码科技IT培训机构!

学习CPU并行程序性能优化的意义&#xff1a; 学习CPU计算是现代计算机科学中不可或缺的一部分。掌握CPU计算原理和应用&#xff0c;能够提高我们的编程技能和解决问题的能力&#xff0c;帮助我们更好地应对计算机科学领域中的挑战和机遇。此外&#xff0c;CPU计算在计算机体系结…

python写路径时候的问题————转载ningqingzy的文章

作为笔记总结学习&#xff0c;如有侵权&#xff0c;立马删除。 总结有三种方法&#xff1a; 更换为绝对路径的写法&#xff1a;func1(“C:\Users\renyc”)显式声明字符串不用转义&#xff08;加r&#xff09;&#xff1a;func1(r"C:\Users\renyc")使用Linux的路径&a…

workbench 链接mysql 报错 authentication plugin caching_sha2_password

用workbench连接MySQL出现Authentication plugin ‘caching_sha2_password’ cannot be loaded的问题&#xff0c;如下图 原因 出现这个问题的原因是由于Navicat和MySQL的版本问题&#xff0c; mysql8 之前&#xff0c;加密规则是mysql_native_password&#xff1b; mysql8 之后…

leetcode97. 交错字符串(动态规划-java)

交错字符串 leetcode97. 交错字符串题目描述解题思路代码演示&#xff1a; 动态规划加状态压缩代码演示 动态规划专题 leetcode97. 交错字符串 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/interleaving-string 题目描…

线性代数高级--矩阵的秩--SVD分解定义--SVD分解的应用

目录 矩阵的秩 概念 k阶子式 矩阵的秩的定义 矩阵的秩的性质 SVD分解 概念 注意 SVD的分解过程 SVD分解的应用 矩阵的秩 概念 矩阵的秩是线性代数中的一个重要概念&#xff0c;用于描述矩阵的行&#xff08;或列&#xff09;向量的线性无关程度。矩阵的秩可以通过…

chatgpt赋能python:Python遍历0到100的使用场景及方法

Python遍历0到100的使用场景及方法 Python是一种简洁、高效的脚本语言&#xff0c;广泛用于各种领域的开发。本文介绍Python遍历0到100的使用场景以及方法&#xff0c;旨在帮助读者更加了解Python的强大之处。 遍历0到100的背景和意义 遍历0到100是一种常见的问题&#xff0…

网络安全合规-银行业数据治理架构体系搭建(一)

为引导银行业金融机构加强数据治理&#xff0c;充分发挥数据价值&#xff0c;全面向高质量发展转变&#xff0c;银监会于2018年发布了《银行业金融机构数据治理指引》&#xff0c;主要内容如下&#xff1a; 近年来银行业金融机构在业务快速发展过程中&#xff0c;积累了客户数…

JavaScript 手写代码 第六期(重写数组方法三) 用于遍历的方法

文章目录 1. 为什么要手写代码&#xff1f;2. 手写代码2.1 forEach2.1.1 基本使用2.1.2 手写实现 2.2 map2.2.1 基本使用2.2.2 手写实现 2.3 filter2.3.1 基本使用2.3.2 手写实现 2.4 every2.4.1 基本使用2.4.2 手写实现 2.5 some2.5.1 基本使用2.5.2 手写实现 2.6 reduce2.6.1…

虚幻引擎(UE5)-大世界分区WorldPartition教程(二)

文章目录 前言一、OFPA怎么用二、OFPA怎么用总结 上一篇&#xff1a;虚幻引擎(UE5)-大世界分区WorldPartition教程(一) 前言 在UE4版本中中&#xff0c;Actor是保存在关卡文件中的&#xff0c;也就是说&#xff0c;如果要编辑关卡中的某些Actor&#xff0c;需要签出关卡文件进…