java实现简易计算器

article/2025/10/20 7:53:56

Java简易计算器 

用java语言写的一个简易计算器,实现了最基本的+、-、*、/ 运算。

先来看下效果:


界面简述:

整个面板的由一个JTextFiled组件+16个JButton组件构成,外加一个JPanel组件存放16个按钮,其布局为4x4的网格布局(GridLayout)。

显示框与按钮面板放在了整个面板容器中,布局为BorderLayout,显示框放容器北部,整个按钮面板放容器中部。


功能实现简述:

由匿名内部类实现ActionListener接口,按钮注册进行监听,并捕获按钮事件。
由于该计算器只能计算中缀表达式,即数字与运算符交替出现的表达式,获取输入的运算表达式,并将其存与一个字符串中。

这里需要借助栈来完成表达式的计算,首先将字符串分割成字符串数组,由中缀的定义知数组奇数位为运算符(从第0位开始),偶数位为操作数,因此可将偶数为操作数进栈,遇见+(-)运算符,则将下一个数以正(负)的形式压人栈中,遇见*或/运算符,则将栈顶元素出栈与数组后一元素进行计算,并将其结果重新压入栈中,直至遍历至数组最后一个元素。
最后将栈中的元素进行求和。

代码实现:
//package com.cal;import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Stack;
import javax.swing.*;class MyException extends Exception{public MyException() {super();}public MyException(String message) {super(message);}
}class SwingConsole{public static void run(final JFrame f,final int width,final int height){SwingUtilities.invokeLater(new Runnable(){public void run(){f.setTitle(f.getClass().getSimpleName());f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setSize(width,height);f.setVisible(true);}});}
}public class MyCalculator extends JFrame{/** */private JTextField textField;				//输入文本框private String input;						//结果private String operator;					//操作符public MyCalculator() {input = "";operator = "";Container container = this.getContentPane();JPanel panel = new JPanel();textField = new JTextField(30);textField.setEditable(false);						//文本框禁止编辑textField.setHorizontalAlignment(JTextField.LEFT);//textField.setBounds(100, 100, 20, 20);			//在容器布局为空情况下生效textField.setPreferredSize(new Dimension(200,30));container.add(textField, BorderLayout.NORTH);String[] name= {"7","8","9","+","4","5","6","-","1","2","3","*","0","C","=","/"};panel.setLayout(new GridLayout(4,4,1,1));for(int i=0;i<name.length;i++) {JButton button = new JButton(name[i]);button.addActionListener(new MyActionListener());panel.add(button);}container.add(panel,BorderLayout.CENTER);}class MyActionListener implements ActionListener{			//内部类实现按钮响应@Overridepublic void actionPerformed(ActionEvent e) {int cnt=0;String actionCommand = e.getActionCommand();			//获取按钮上的字符串if(actionCommand.equals("+") || actionCommand.equals("-") || actionCommand.equals("*")|| actionCommand.equals("/")) {input += " " + actionCommand + " ";}else if(actionCommand.equals("C")) {					//清除输入input = "";} else if(actionCommand.equals("=")) {					//按下等号try {input+= "="+calculate(input);} catch (MyException e1) {if(e1.getMessage().equals("Infinity"))input+= "=" + e1.getMessage();elseinput = e1.getMessage();}textField.setText(input);input="";cnt = 1;}elseinput += actionCommand;							//按下数字if(cnt == 0)textField.setText(input);}}private String calculate(String input) throws MyException{				//计算函数String[] comput = input.split(" ");					Stack<Double> stack = new Stack<>();Double m = Double.parseDouble(comput[0]);stack.push(m);										//第一个操作数入栈for(int i = 1; i < comput.length; i++) {if(i%2==1) {				if(comput[i].equals("+"))stack.push(Double.parseDouble(comput[i+1]));if(comput[i].equals("-"))stack.push(-Double.parseDouble(comput[i+1]));if(comput[i].equals("*")) {					//将前一个数出栈做乘法再入栈Double d = stack.peek();				//取栈顶元素stack.pop();stack.push(d*Double.parseDouble(comput[i+1]));}if(comput[i].equals("/")) {					//将前一个数出栈做乘法再入栈double help = Double.parseDouble(comput[i+1]);  if(help == 0)throw new MyException("Infinity");			//不会继续执行该函数double d = stack.peek(); stack.pop(); stack.push(d/help);  }}}double d = 0d;while(!stack.isEmpty()) {			//求和d += stack.peek();stack.pop();}String result = String.valueOf(d);return result;}public static void main(String[] args) {SwingConsole.run(new MyCalculator(), 250, 300);}
}

运行效果:




http://chatgpt.dhexx.cn/article/IXahEhbE.shtml

相关文章

做一个简易计算器(VB版)

今天小编来带大家用VB做一个简易计算器 废话不多说&#xff0c;下面就是具体步骤了 1、创建控件组的方法首先创建一个命令按钮&#xff0c;调整其大小&#xff08;觉得合适就行&#xff09;&#xff0c;名称为Command1&#xff0c;Caption 属性为数字 0 &#xff1b;然后进行…

简易计算器的设计_C#课程设计

以下内容可且仅可供参考&#xff0c;如有错误欢迎指正。 部分内容借鉴自百度 侵删致歉 位切换键盘的实现用了复杂的拖64给label的方法&#xff0c;此功能可以在自己计算机上的计算器里找到。 目录 一、设计简介 1.设计背景 2.开发工具及环境 二、需求分析 1.设计功能要求 …

Python制作简易计算器(GUI)---Tkinter

Python制作简易计算器&#xff08;GUI&#xff09;---Tkinter Tkinter简介Tkinter 与 PyQt5 的比较TkinterPyQt5 项目展示导入模块函数封装1. 运算公式的拼接与展示2. 将显示框的内容删除3. 使用eval()函数对表达式求值 主逻辑1. 布局窗口2. 布局表达式展示区域3. 布局按钮 代码…

自制个性计算器

一、布局文件xml的制作。 如图&#xff1a;是布局之后的一个效果图 完全可以自定义自己喜欢的各种类型的图片。 代码如下&#xff1a; 正所谓每一个鲜艳靓丽app背后都有成堆的代码支撑这句话是没有错的。由于没有长截屏软件只能用短截屏了&#xff0c;大家谅解一下&#…

C++简易计算器的实现

定义&#xff1a; 计算器是近代人发明的可以进行数字运算的机器。 也就是说&#xff0c;计算器不等同于算盘&#xff0c;前者能自行运算&#xff0c;后者只能简便计算过程&#xff0c;在古代,人们发明了许多计算工具,如算筹、算盘、计算尺等,随着社会的发展和科技的进步,计算…

制作简易计算器

简易计算器 效果展示图项目要求内容分析涉及函数 效果展示图 项目要求 制作简易计算器&#xff0c;使其能实现简单的加&#xff0c;减&#xff0c;乘&#xff0c;除运算。 1.在两个文本框中分别输入两个数字 2.输入完成后&#xff0c;再次点击加&#xff0c;减&#xff0c;乘&…

C# 制作简易计算器

前言&#xff1a;环境是vs 2022 1、打开vs2022后&#xff0c;右边导航栏选择创建新项目。 2、选择Windows窗体应用&#xff08;.net Framework&#xff09; 3、进入配置新项目界面&#xff08;项目名称和位置可自行修改&#xff09;点击创建 4、窗体From1即为我们要要编辑的位…

至简设计系列_简易计算器

–作者&#xff1a;小黑同学 本文为明德扬原创及录用文章&#xff0c;转载请注明出处&#xff01; 1.1 总体设计 1.1.1 概述 计算器是近代人发明的可以进行数字运算的机器。现代的电子计算器能进行数学运算的手持电子机器&#xff0c;拥有集成电路芯片&#xff0c;但结构比电…

如何制作一个简易的计算器

今天&#xff0c;我们来学习如何完成一个简易计算器的功能吧&#xff01; 一.布局 我们可以在HTML中使用CSS完成计算器的布局。接下来&#xff0c;我们便先来看看我们所要实现的效吧&#xff01; 上图的计算器中&#xff0c;我们可以通过以下几个步骤完成对计算器的简单布局…

简易版计算器

这次我们来写一个简单的计算器案例 代码部分 HTML部分 首先设置一个基本样式&#xff0c;把我们需要的“计算”按钮&#xff0c;“-*/”四个计算符合&#xff0c;三个文本框准备好(两个用来输入数字进行计算&#xff0c;一个用来接收计算出来的结果)&#xff0c;再为三个文…

java拦截器怎么实现

Java拦截器是一种对象拦截器&#xff0c;它可以拦截任何的类、方法和字段。拦截器还可以用于检查类是否已经加载以及对字段的访问权限是否符合规范。下面就让我们来了解一下 java拦截器怎么实现吧。 在 Java中&#xff0c;可以通过重写方法和代码块来实现拦截功能&#xff0c;但…

Java中的过滤器和拦截器

Java中的过滤器和拦截器 一.应用场景 拦截器应用场景 拦截器本质上是面向切面编程&#xff08;AOP&#xff09;&#xff0c;符合横切关注点的功能都可以放在拦截器中来实现&#xff0c;主要的应用场景包括&#xff1a; 登录验证&#xff0c;判断用户是否登录。权限验证&…

拦截器(HandlerInterceptor)

目录 1 什么是拦截器 2 HandlerInterceptor和WebMvcConfigurer 2.1 HandlerInterceptor 2.2 WebMvcConfigurer 3 拦截器实现流程 1 什么是拦截器 拦截器是相对于Spring中来说的&#xff0c;它和过滤器不一样&#xff0c;过滤器的范围更广一些是相对于Tomcat容器来说的。拦…

用 Java 实现拦截器 Interceptor 的拦截功能

Java 里的拦截器是动态拦截 action 调用的对象&#xff0c;它提供了一种机制可以使开发者可以定义在一个 action 执行的前后执行的代码&#xff0c;也可以在一个 action 执行前阻止其执行&#xff0c;同时也提供了一种可以提取 action 中可重用部分的方式。在 AOP&#xff08;A…

java-拦截器

(1)浏览器发送一个请求会先到Tomcat的web服务器 (2)Tomcat服务器接收到请求以后&#xff0c;会去判断请求的是静态资源还是动态资源 (3)如果是静态资源&#xff0c;会直接到Tomcat的项目部署目录下去直接访问 (4)如果是动态资源&#xff0c;就需要交给项目的后台代码进行处理…

JAVA中的拦截器、过滤器

JAVA变成拦截器、过滤器 一、拦截器1、简介说明2、源码及方法说明3、拦截器自定义应用 二、过滤器1、简介说明2、源码及方法说明3、过滤器的自定义应用 三、Springboot中的WebMvcConfigurer1、简介2、主要方法3、添加拦截器 四、区别1、原理2、触发3、其他 一、拦截器 1、简介…

Java开发学习----拦截器(Interceptor)详细解析

一、拦截器概念 讲解拦截器的概念之前&#xff0c;我们先看一张图: (1)浏览器发送一个请求会先到Tomcat的web服务器 (2)Tomcat服务器接收到请求以后&#xff0c;会去判断请求的是静态资源还是动态资源 (3)如果是静态资源&#xff0c;会直接到Tomcat的项目部署目录下去直接访…

JAVA三大器之拦截器

1&#xff0c;拦截器的概念 java里的拦截器是动态拦截Action调用的对象&#xff0c;它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码&#xff0c;也可以在一个Action 执行前阻止其执行&#xff0c;同时也提供了一种可以提取Action中可重用部分代码的方式。…

java之拦截器

java里的拦截器是动态 拦截action的web请求&#xff0c;而过滤器能够进行系统级别的过滤&#xff0c;即能够过滤所有的web请求。从这可以看出拦截器是有一定的局限性的。拦截器是基于jdk实现的动态代理&#xff0c;拦截器是动态拦截action调用的对象&#xff0c; 拦截器可以使得…

Java三大器之拦截器(Interceptor)的实现原理及代码示例

前言&#xff1a;前面2篇博客&#xff0c;我们分析了Java中过滤器和监听器的实现原理&#xff0c;今天我们来看看拦截器。 1&#xff0c;拦截器的概念 java里的拦截器是动态拦截Action调用的对象&#xff0c;它提供了一种机制可以使开发者在一个Action执行的前后执行一段代…