Java 用栈处理四则运算

Java的四则运算 四则运算咱们小学就学过: 加 + 目录 四则运算咱们小学就学过: 加 + 减 - 乘 × 除 ÷ 一.那么首先计算得到表达式的结果,然后再打印输出这个结果。 例1.20+30=50 例2:20-30=-10 例3.已知a=20,所以a×10=200 例4.对于整数而言,除法用的是整除,整数除以整数,结果仍然是整数,只看商,不看余数 10÷3=?应该也是3 但是如果我们想要取余数呢?取模(取余数)% (余数就是1) 但是就记住只有整数的除法来说,取模... 阅读详情

一、概念

中缀表达式:即人们常用的算式写法,如8+(9-1)*8+7/2

后缀表达式:运算符放到数字后,如8 9 1 - 8 * + 7 2 /+


二、思路


一共分两步:

1.中缀表达式转后缀表达式

从左到右遍历中缀表达式的每一个数字和运算符。
如果数字就输出(即存入后缀表达式);
如果是右括号,则弹出左括号之前的运算符;
如果优先级低于栈顶运算符,则弹出栈顶运算符,并将当前运算符进栈。
遍历结束后,将栈则剩余运算符弹出。


2.后缀表达式计算结果

从左到右遍历后缀表达式,遇到数字就进栈,遇到符号,就将栈顶的两个数字出栈运算,运算结果进栈,直到获得最终结果。


三、代码

目前只支持整数的四则运算

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 目前只能做简单的四则运算,不支持浮点数和其他符号,不支持多线程
 * 计算步骤:
 * 1.中辍表达式转后缀
 * 2.计算后缀表达式
 */
public class Arithmetic {
    /** 错误提示 **/
    private static final String ERROR_ZERO = "DividedZero";
    
    /** 检测一个字符串是不是数字 **/
    private static Pattern pattern = Pattern.compile("\\d+\\.?\\d?");
    
    
    /** 运算符优先级 **/
    private static Map<String, Integer> priority = new HashMap<>();
    static {
        priority.put("*", 2);
        priority.put("/", 2);
        priority.put("+", 1);
        priority.put("-", 1);
        priority.put("", -1); // 无运算符
    }
    
    /** 替换表达式中的中文括号 **/
    private static Map<String, String> replace = new HashMap<>();
    static {
        replace.put("(", "(");
        replace.put(")", ")");
    }
    
    /** 支持的运算符 **/
    private static String[] operator = {"+", "-", "*", "/"};
    
    
用Java求解10以内的整数的四则运算表达式 一、思路 求解10以内的整数的四则运算表达式,主要是利用栈进行计算,需要用两个栈,数字栈和符号栈,用数组存放表达式,用两个栈分别遍历数字和符号,利用符号优先关系,判断当前符号是应该入栈还是出栈进行运算。 二、代码 //栈描述 class SeqStack<T>{ // 存储栈的元素的数组 private T[] stack; // top表示栈顶的位置 ... 阅读详情

相关推荐

Java实现支持复杂四则运算的计算器

简介:构建一个功能全面的计算器应用是IT行业的基础任务,尤其在数学运算方面。本项目的目标是创建一个可以处理基本和复杂四则运算的计算器,包括括号和运算优先级。该项目适合初学者,采用基础算法,涉及表达式解析、数据结构(如栈和队列)、异常处理、用户界面设计、设计模式以及代码测试。通过这个项目,初学者可以加深对Java编程的理解,并提升解决问题的能力。

weixin_32661831的博客 1179

Java实现的带括号多则运算计算器

在Java中,每个源代码文件通常包含一个公共类,并且文件名与公共类名相同。类可以包含多个方法,这些方法定义了类的行为。以下是一个简单的类和方法定义的例子:");在这个例子中,HelloWorld类包含一个main方法,它是Java应用程序的入口点。public关键字表示该类和方法对其他类可见。Java编译器(javac)负责将源代码文件(.java)转换成字节码文件(.class)。以下是编译一个简单的Java类的基本命令:这个命令执行后,会在同一目录下生成一个名为。

weixin_30533301的博客 1039

TC387 MCMCAN Message RAM配置详解:Tx Buffer与Rx FIFO地址布局

在嵌入式CAN/CAN FD通信系统中,缓冲区和FIFO是数据收发的核心机制,而AURIX TC3xx系列单片机将这一机制集成在了MCMCAN模块专用的Message RAM中。这是一块由CAN控制器独占的内存区域,开发人员需要按照寄存器规范手动划分Tx Buffer、Rx FIFO、过滤元素等子区间。合理的RAM布局能确保不同功能区域互不重叠、有序排列,避免数据覆盖与错帧。通过掌握TXBC、RXF0C等配置寄存器的字段含义,结合实用的地址布局表,可以显著降低多节点CAN通信的调试成本。本内容面向使用TC3

weixin_34226182的博客 222

数据分析:美团大赛的具体案例制作

在数据集中,存在三个变量的经纬度数据,分别是商家的经纬度数据('sender_lng', 'sender_lat'),顾客的经纬度数据('recipient_lng', 'recipient_lat')和骑手的经纬度数据('grab_lng', 'grab_lat')。根据结果可知,平台订单创建时间的中位数为2022-10-21 02:59:01,平台订单创建时间的众数为2022-10-19 03:29:41、2022-10-23 03:29:47,与直方图相符。接下来,我们对是否为预定订单变量进行分析。

m0_68269346的博客 2499

开源工具对比:5款主流大数据脱敏框架评测

数据脱敏(Data Masking/Anonymization),也称为数据漂白、数据去标识化,是指在不影响数据可用性的前提下,通过一定的技术手段对敏感信息进行处理,使其无法被识别或关联到具体个人或实体的过程。当应用程序向数据库写入数据(INSERT/UPDATE)时,ShardingSphere 会拦截 SQL,对配置了脱敏规则的字段,使用指定的算法进行加密/脱敏处理,然后将处理后的数据写入到。如果你的答案是“是”,那么数据脱敏,尤其是针对海量数据的。好的,各位技术同仁,数据安全领域的探索者们,大家好。

小程序开发 1184

2025年CSP-J初赛真题及答案解析(完整版)

2025年CSP-J初赛真题及答案解析(完整版)

王老师青少年编程 1万+

【知识分享】IBIS 建模指南 03

本文介绍了差分缓冲器的数据提取方法,重点分析了差分系统与单端系统的核心差异。文章详细阐述了差分接收机和驱动器的结构特点、工作原理及建模方法,指出全差分结构具有优异的电源噪声抑制能力。针对IBIS建模规范,作者提出了三维I-V曲面数据提取技术,并介绍了共模/差模电流分离、片上端接处理以及V-T表生成的解决方案。文章还探讨了差分电容(C_diff)的测量方法和数据简化策略,为复杂差分缓冲器的精确建模提供了系统化的技术路径。

一只豌豆象的博客 1282

Keil uVision5 STM32 startup_stm32f10x_md_vl.s error A3906U Malformed via file target not created..

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 2777

高通8155源码下载与Android源码编译

一.下载代码 高通下载源码位置: Qualcomm CreatePoint 注册账号,然后登入 可以先选择edit -> infotainment -> sa8155 -> favorites, 点击View TOC就可以过滤出sa8155所有的信息目录.如下图 拉取代码链接在ChipCode中,点击进去可以看到所有的基线版本,选择你需要下载的版本点进去,如sa8155p-la-1-0_ap_standard_oem,把高通专有代码和开源代码都下载到本机. 1..

Johnny2004的专栏 7675

Unreal 从入门到精通之VR常用操作

本文总结了使用Unreal5开发VR项目时遇到的常见问题及其解决方案。首先,介绍了如何通过VRPawn的TryTeleport函数设置玩家视角位置,确保头显移动时安全区域的正确传送。其次,详细说明了如何在Unreal中播放视频,包括导入视频文件、创建媒体播放器和媒体纹理,并将其应用到3D物体上。接着,讲解了如何播放VR全景视频,建议使用MediaPlate媒体板并调整几何体为球体。最后,讨论了如何手动打开和关闭VR模式,以便在PC模式和头显模式之间切换。这些方法为VR开发提供了实用的技术指导。

TxNet 952

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

jre9下载 jdk9

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

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ssm框架搭建

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

上一篇: Android 检查APP是否被设置禁止显示通知
下一篇: 【Android笔记】Fragment用法(未完)
KingLearnJava
博客等级 码龄12年 93粉丝 84原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值